Changeset 17 for trunk


Ignore:
Timestamp:
May 3, 2006, 10:14:37 AM (15 years ago)
Author:
Eugene Romanenko
Message:

update makefiles, remove absolute paths, update djvulibre to version 3.5.17

Location:
trunk
Files:
2 added
118 edited

Legend:

Unmodified
Added
Removed
  • trunk/Lucide/SOURCE/gui/docViewer.cpp

    r2 r17  
    1616
    1717
    18 // OpenWatcom 1.4 headers doesn't have GpiDrawBits() declaration
     18// OpenWatcom headers doesn't have GpiDrawBits() declaration
    1919extern "C" {
    2020    LONG APIENTRY GpiDrawBits(HPS hps, PVOID pBits, PBITMAPINFO2 pbmiInfoTable,
     
    2222}
    2323
    24 typedef LuDocument_LuRectSequence *PLuRectSequence;
     24typedef LuDocument_LuRectSequence    *PLuRectSequence;
     25typedef LuDocument_LuLinkMapSequence *PLuLinkMapSequence;
    2526
    2627#define LINE_HEIGHT     16
     
    5657    spos_y      = 0;
    5758    progressDlg = new ProgressDlg( hWndFrame );
     59    drawareas   = NULL;
     60    drawareaIndex = 0;
    5861    // continuous view
    59     continuous  = true;
     62    continuous  = false;
    6063    pagesizes   = NULL;
    6164    realVscrollMax = 0;
    62     VScrollStep = 0;
    63     drawareas   = NULL;
     65    VScrollStep = 1;
    6466    // asynch draw
    6567    abortAsynch = false;
    6668    termdraw    = false;
    6769    enableAsynchDraw = false;
    68     WinSetRectEmpty( hab, &drawRect );
    6970    DosCreateMutexSem( NULL, &todrawAccess, 0, FALSE );
    7071    DosCreateEventSem( NULL, &haveDraw, 0, FALSE );
     
    110111    if ( doc != NULL ) {
    111112        LuDocument::freeRectangles( ev, selrects );
    112         LuDocument::freeLinkMapping( ev, links );
     113        freeLinks();
    113114        freeFoundrects();
    114115    }
     
    143144    delete pagesizes;
    144145    pagesizes   = NULL;
     146    freeFoundrects();
    145147    delete foundrects;
    146148    foundrects  = NULL;
     149    freeLinks();
    147150
    148151    if ( doc != NULL )
     
    159162        foundrects = new PLuRectSequence[ totalpages ];
    160163        memset( foundrects, 0, sizeof( PLuRectSequence ) * totalpages );
    161         enableAsynchDraw = false; //doc->isAsynchRenderingSupported( ev );
     164        links = new PLuLinkMapSequence[ totalpages ];
     165        memset( links, 0, sizeof( PLuLinkMapSequence ) * totalpages );
     166        enableAsynchDraw = doc->isAsynchRenderingSupported( ev );
    162167        drawPage();
    163168    }
     
    166171void DocumentViewer::freeFoundrects()
    167172{
    168     if ( foundrects != NULL ) {
     173    if ( foundrects != NULL )
     174    {
    169175        for ( long i = 0; i < totalpages; i++ ) {
    170             LuDocument::freeRectangles( ev, foundrects[ i ] );
    171         }
     176            if ( foundrects[ i ] != NULL ) {
     177                LuDocument::freeRectangles( ev, foundrects[ i ] );
     178                foundrects[ i ] = NULL;
     179            }
     180        }
     181    }
     182}
     183
     184void DocumentViewer::freeLinks()
     185{
     186    if ( links != NULL )
     187    {
     188        for ( long i = 0; i < totalpages; i++ ) {
     189            if ( links[ i ] != NULL ) {
     190                LuDocument::freeLinkMapping( ev, links[ i ] );
     191                links[ i ] = NULL;
     192            }
     193        }
     194
     195        delete links;
     196        links = NULL;
    172197    }
    173198}
     
    177202void DocumentViewer::goToPage( long page )
    178203{
    179     currentpage = page;
    180     if ( doc != NULL ) {
     204    if ( continuous && ( doc != NULL ) )
     205    {
     206        double pgpos = pagenumToPos( page ) / VScrollStep;
     207        vertScroll( hWndDoc, MPFROM2SHORT( pgpos, SB_SLIDERPOSITION ), NULLHANDLE );
    181208        drawPage();
    182         Lucide::checkNavigationMenus();
     209    }
     210    else
     211    {
     212        currentpage = page;
     213        if ( doc != NULL ) {
     214            drawPage();
     215            Lucide::checkNavigationMenus();
     216        }
    183217    }
    184218}
     
    259293            _this->progressDlg->hide();
    260294            _this->goToPage( i );
    261             if ( _this->foundrects[i]->_length > 0 )
    262             {
     295            if ( _this->foundrects[i]->_length > 0 ) {
    263296                RECTL r;
    264                 _this->docPosToWinPos( &(_this->foundrects[i]->_buffer[0]), &r );
     297                _this->docPosToWinPos( 0, &(_this->foundrects[i]->_buffer[0]), &r );
    265298                _this->scrollToPos( _this->hWndDoc, NULLHANDLE, r.xLeft, r.yBottom, false );
    266299            }
     
    322355    if ( continuous )
    323356    {
    324 
     357        adjustSize();
     358        WinSendMsg( hWndDoc, WM_SIZE, MPFROM2SHORT( cxClient, cyClient ),
     359                    MPFROM2SHORT( cxClient, cyClient ) );
     360        WinInvalidateRect( hWndDoc, NULL, FALSE );
    325361    }
    326362    else
     
    328364        LuDocument::freeRectangles( ev, selrects );
    329365        selrects = NULL;
    330         LuDocument::freeLinkMapping( ev, links );
    331         links = doc->getLinkMapping( ev, currentpage );
     366        if ( links != NULL ) {
     367            if ( links[ currentpage ] == NULL ) {
     368                links[ currentpage ] = doc->getLinkMapping( ev, currentpage );
     369            }
     370        }
    332371        Lucide::enableCopy( false );
    333372        adjustSize();
     
    361400        case SB_SLIDERTRACK:
    362401        case SB_SLIDERPOSITION:
    363             sVscrollInc = ( SHORT1FROMMP( mp2 ) - sVscrollPos ) *
    364                                     ( continuous ? VScrollStep : 1 );
    365             break;
    366     }
    367 
    368     if ( continuous ) {
    369         sVscrollInc = __max( -sVscrollPos * VScrollStep, __min( sVscrollInc,
    370                                   ( sVscrollMax - sVscrollPos ) * VScrollStep ) );
    371     } else {
    372         sVscrollInc = __max( -sVscrollPos, __min( sVscrollInc, sVscrollMax - sVscrollPos ) );
    373     }
     402            sVscrollInc = ( SHORT1FROMMP( mp2 ) - sVscrollPos ) * VScrollStep;
     403            break;
     404    }
     405
     406    sVscrollInc = __max( -sVscrollPos * VScrollStep, __min( sVscrollInc,
     407                              ( sVscrollMax - sVscrollPos ) * VScrollStep ) );
    374408
    375409    if ( sVscrollInc != 0 )
    376410    {
    377         sVscrollPos += (SHORT)( continuous ? ( sVscrollInc / VScrollStep ) : sVscrollInc );
     411        sVscrollPos += (SHORT)( sVscrollInc / VScrollStep );
    378412        WinScrollWindow( hwnd, 0, sVscrollInc, NULL, NULL, hrgn, NULL, SW_INVALIDATERGN );
    379413        WinSendMsg( hWndVscroll, SBM_SETPOS, MPFROMSHORT( sVscrollPos ), MPVOID );
     
    465499    else {
    466500        realVscrollMax = sVscrollMax = (SHORT)__max( 0, height - cyClient );
     501        VScrollStep = 1;
    467502    }
    468503    sVscrollPos = __min( sVscrollPos, sVscrollMax );
     
    503538    if ( hps != NULLHANDLE )
    504539    {
    505         LONG rclx = d->drawRect.xRight - d->drawRect.xLeft;
    506         LONG rcly = d->drawRect.yTop - d->drawRect.yBottom;
    507 
    508         POINTL aptlPoints[4]={ d->drawRect.xLeft, d->drawRect.yBottom,
    509                                d->drawRect.xRight-1, d->drawRect.yTop-1,
     540        PRECTL drawRect = &((*d->drawareas)[d->drawareaIndex].drawrect);
     541        LONG rclx = drawRect->xRight - drawRect->xLeft;
     542        LONG rcly = drawRect->yTop - drawRect->yBottom;
     543
     544        POINTL aptlPoints[4]={ drawRect->xLeft, drawRect->yBottom,
     545                               drawRect->xRight-1, drawRect->yTop-1,
    510546                               0, 0, rclx, rcly };
    511547
     
    529565{
    530566    DosSetPriority( PRTYS_THREAD, PRTYC_REGULAR, PRTYD_MINIMUM, 0 );
    531     DocumentViewer *d = (DocumentViewer *)p;
     567    DocumentViewer *_this = (DocumentViewer *)p;
    532568
    533569    HAB thab = WinInitialize( 0 );
     
    535571
    536572    ULONG postCnt;
    537     while ( !d->termdraw )
    538     {
    539         DosWaitEventSem( d->haveDraw, SEM_INDEFINITE_WAIT );
    540         DosResetEventSem( d->haveDraw, &postCnt );
    541         d->abortAsynch = false;
    542 
    543         if ( !WinIsRectEmpty( thab, &d->drawRect) )
     573    while ( !_this->termdraw )
     574    {
     575        DosWaitEventSem( _this->haveDraw, SEM_INDEFINITE_WAIT );
     576        DosResetEventSem( _this->haveDraw, &postCnt );
     577        _this->abortAsynch = false;
     578
     579        if ( ( _this->drawareas != NULL ) && ( _this->doc != NULL ) )
    544580        {
    545             if ( d->doc != NULL )
     581            DosRequestMutexSem( _this->todrawAccess, SEM_INDEFINITE_WAIT );
     582
     583            for ( int i = 0; i < _this->drawareas->size(); i++ )
    546584            {
    547                 DosRequestMutexSem( d->todrawAccess, SEM_INDEFINITE_WAIT );
    548                 LONG rclx = d->drawRect.xRight - d->drawRect.xLeft;
    549                 LONG rcly = d->drawRect.yTop - d->drawRect.yBottom;
    550                 d->pixbuf = new LuPixbuf( d->ev, rclx, rcly );
    551                 d->doc->renderPageToPixbufAsynch( d->ev, d->currentpage,
    552                            d->spos_x, d->spos_y, rclx, rcly, d->realzoom, 0, d->pixbuf,
    553                            asynchCallbackFnDraw, asynchCallbackFnAbort, p );
    554                 if ( !d->abortAsynch )
    555                 {
    556                     HPS hps = WinGetPS( d->hWndDoc );
    557                     if ( hps != NULLHANDLE ) {
    558                         d->drawSelection( hps, &d->drawRect );
    559                         d->drawFound( hps, &d->drawRect );
    560                         WinReleasePS( hps );
    561                     }
    562                     WinSetRectEmpty( thab, &d->drawRect );
     585                PageDrawArea *pda = &(*_this->drawareas)[ i ];
     586
     587                LONG rclx = pda->drawrect.xRight - pda->drawrect.xLeft;
     588                LONG rcly = pda->drawrect.yTop - pda->drawrect.yBottom;
     589                _this->pixbuf = new LuPixbuf( _this->ev, rclx, rcly );
     590                _this->doc->renderPageToPixbufAsynch( _this->ev, pda->pagenum,
     591                       pda->startpos.x, pda->startpos.y, rclx, rcly, _this->realzoom, 0,
     592                       _this->pixbuf, asynchCallbackFnDraw, asynchCallbackFnAbort, p );
     593                delete _this->pixbuf;
     594                _this->pixbuf = NULL;
     595
     596                if ( _this->abortAsynch ) {
     597                    break;  // TODO: remove completed areas from drawareas
    563598                }
    564                 delete d->pixbuf;
    565                 d->pixbuf = NULL;
    566                 DosReleaseMutexSem( d->todrawAccess );
    567             }
     599            }
     600
     601            if ( !_this->abortAsynch )
     602            {
     603                HPS hps = WinGetPS( _this->hWndDoc );
     604                if ( hps != NULLHANDLE ) {
     605                    //_this->drawSelection( hps, &_this->drawRect );
     606                    //_this->drawFound( hps, &_this->drawRect );
     607                    WinReleasePS( hps );
     608                }
     609                delete _this->drawareas;
     610                _this->drawareas = NULL;
     611            }
     612
     613            DosReleaseMutexSem( _this->todrawAccess );
    568614        }
    569615    }
     
    599645    if ( WinIntersectRect( hab, &rclDraw, &rcl, &rclPage ) )
    600646    {
    601         if ( isSubrect( &drawRect, &rclDraw ) &&
    602              ( sVscrollInc == 0 ) && ( sHscrollInc == 0 ) ) {
    603             return;
     647        if ( ( drawareas != NULL ) && ( drawareas->size() > 0 ) ) {
     648            if ( isSubrect( &((*drawareas)[0].drawrect), &rclDraw ) &&
     649                 ( sVscrollInc == 0 ) && ( sHscrollInc == 0 ) ) {
     650                return;
     651            }
    604652        }
    605653
    606654        abortAsynch = true;
    607655        DosRequestMutexSem( todrawAccess, SEM_INDEFINITE_WAIT );
    608         if ( !WinIsRectEmpty( hab, &drawRect ) )
     656
     657        if ( drawareas == NULL ) {
     658            drawareas = new DrawAreas;
     659        }
     660        if ( drawareas->size() == 0 ) {
     661            PageDrawArea pda;
     662            memset( &pda, 0, sizeof( pda ) );
     663            pda.pagenum = currentpage;
     664            drawareas->push_back( pda );
     665        }
     666
     667        PageDrawArea *ppda = &((*drawareas)[0]);
     668
     669        if ( !WinIsRectEmpty( hab, &ppda->drawrect ) )
    609670        {
    610671            if ( sVscrollInc > 0 ) {
    611                 drawRect.yTop    += sVscrollInc;
     672                ppda->drawrect.yTop    += sVscrollInc;
    612673            } else if ( sVscrollInc < 0 ) {
    613                 drawRect.yBottom += sVscrollInc;
     674                ppda->drawrect.yBottom += sVscrollInc;
    614675            }
    615676            if ( sHscrollInc > 0 ) {
    616                 drawRect.xLeft  -= sHscrollInc;
     677                ppda->drawrect.xLeft  -= sHscrollInc;
    617678            } else if ( sHscrollInc < 0 ) {
    618                 drawRect.xRight -= sHscrollInc;
    619             }
    620         }
    621         WinUnionRect( hab, &drawRect, &drawRect, &rclDraw );
    622         spos_x = sHscrollPos + drawRect.xLeft;
    623         spos_y = (cyClient - drawRect.yTop) + sVscrollPos;
     679                ppda->drawrect.xRight -= sHscrollInc;
     680            }
     681        }
     682        WinUnionRect( hab, &ppda->drawrect, &ppda->drawrect, &rclDraw );
     683        ppda->startpos.x = sHscrollPos + ppda->drawrect.xLeft;
     684        ppda->startpos.y = ( cyClient - ppda->drawrect.yTop ) + sVscrollPos;
    624685
    625686        // workaround ?
    626         drawRect.xRight++;
    627         drawRect.yTop++;
     687        ppda->drawrect.xRight++;
     688        ppda->drawrect.yTop++;
    628689
    629690        DosReleaseMutexSem( todrawAccess );
     
    684745
    685746// founds number of page at specified vertical position
    686 long DocumentViewer::posToPagenum( double yPos, double *pageRest )
    687 {
     747// for continuous view only
     748long DocumentViewer::posToPagenum( LONG yPosWin, double *pageRest )
     749{
     750    double yPos = ( cyClient - yPosWin ) + ( sVscrollPos * VScrollStep );
    688751    double pgend = 0;
    689752    for ( long i = 0; i < totalpages; i++ )
     
    698761}
    699762
     763// founds vertical position of specified
     764// for continuous view only
     765double DocumentViewer::pagenumToPos( long pagenum )
     766{
     767    double ypos = 0;
     768    for ( long i = 0; i < pagenum; i++ ) {
     769        ypos += pagesizes[ i ].y;
     770    }
     771    return ypos * realzoom;
     772}
     773
    700774// founds pages and it's areas to draw
    701775DrawAreas *DocumentViewer::foundDrawAreas( PRECTL r )
     
    705779    {
    706780        long foundpage = -1;
    707         double docPos, pageRest;
     781        double pageRest;
    708782        for ( LONG i = r->yTop; i >= r->yBottom; i-- )
    709783        {
    710784            pageRest = 0;
    711             docPos = ( cyClient - i ) + ( sVscrollPos * VScrollStep );
    712             long pg = posToPagenum( docPos, &pageRest );
     785            long pg = posToPagenum( i, &pageRest );
    713786            if ( pg != foundpage )
    714787            {
     
    739812// found current page in continuous view mode.
    740813// it's a page which occupes a most larger area in the window.
    741 void DocumentViewer::foundCurrentPage()
     814void DocumentViewer::determineCurrentPage()
    742815{
    743816    RECTL rcl = { 0 };
     
    777850    {
    778851        PageDrawArea *pda = &(*drawareas)[ i ];
     852
     853        // load links for page if not loaded before
     854        if ( links[ pda->pagenum ] == NULL ) {
     855            links[ pda->pagenum ] = doc->getLinkMapping( ev, pda->pagenum );
     856        }
    779857
    780858        RECTL rclDraw = { __min( pagesizes[ pda->pagenum ].x * realzoom,
     
    819897    WinEndPaint( hps );
    820898
    821     foundCurrentPage();
     899    determineCurrentPage();
    822900}
    823901
     
    833911
    834912// converts document position to window position
    835 void DocumentViewer::docPosToWinPos( LuRectangle *r, PRECTL rcl )
    836 {
    837     rcl->xLeft   = ( r->x1 * realzoom ) - sHscrollPos;
    838     rcl->yBottom = cyClient - ( r->y2 * realzoom ) + sVscrollPos;
    839     rcl->xRight  = ( r->x2 * realzoom ) - sHscrollPos;
    840     rcl->yTop    = cyClient - ( r->y1 * realzoom ) + sVscrollPos;
     913void DocumentViewer::docPosToWinPos( long pagenum, LuRectangle *r, PRECTL rcl )
     914{
     915    if ( continuous )
     916    {
     917        double yplus = pagenumToPos( pagenum );
     918
     919        rcl->xLeft   = ( r->x1 * realzoom ) - sHscrollPos;
     920        rcl->yBottom = cyClient - ( ( yplus + r->y2 ) * realzoom ) +
     921                            ( sVscrollPos * VScrollStep );
     922        rcl->xRight  = ( r->x2 * realzoom ) - sHscrollPos;
     923        rcl->yTop    = cyClient - ( ( yplus + r->y1 ) * realzoom ) +
     924                            ( sVscrollPos * VScrollStep );
     925    }
     926    else
     927    {
     928        rcl->xLeft   = ( r->x1 * realzoom ) - sHscrollPos;
     929        rcl->yBottom = cyClient - ( r->y2 * realzoom ) + sVscrollPos;
     930        rcl->xRight  = ( r->x2 * realzoom ) - sHscrollPos;
     931        rcl->yTop    = cyClient - ( r->y1 * realzoom ) + sVscrollPos;
     932    }
    841933}
    842934
     
    851943        {
    852944            if ( useScale ) {
    853                 docPosToWinPos( &(rects->_buffer[i]), &r );
     945                docPosToWinPos( 0, &(rects->_buffer[i]), &r );
    854946            }
    855947            else
     
    900992}
    901993
    902 // scrolls window during text selection
     994// scrolls window to specified pos (optionally with text selection)
    903995void DocumentViewer::scrollToPos( HWND hwnd, HRGN hrgn, SHORT xpos, SHORT ypos,
    904996                                  bool withSelection )
     
    9811073    else if ( links != NULL )
    9821074    {
    983         for ( int i = 0; i < links->_length; i++ )
     1075        long pg = currentpage;
     1076        if ( continuous ) {
     1077            double tmp;
     1078            pg = posToPagenum( ypos, &tmp );
     1079        }
     1080
     1081        if ( links[ pg ] != NULL )
     1082        {
     1083            for ( int i = 0; i < links[ pg ]->_length; i++ )
     1084            {
     1085                RECTL r = {0};
     1086                docPosToWinPos( pg, &(links[ pg ]->_buffer[i].area), &r );
     1087
     1088                POINTL ptl = { xpos, ypos };
     1089                if ( WinPtInRect( hab, &r, &ptl ) ) {
     1090                    WinSetPointer( HWND_DESKTOP, handptr );
     1091                    return TRUE;
     1092                }
     1093            }
     1094        }
     1095    }
     1096
     1097    return FALSE;
     1098}
     1099
     1100// handles WM_BUTTON1CLICK
     1101BOOL DocumentViewer::wmClick( HWND hwnd, SHORT xpos, SHORT ypos )
     1102{
     1103    if ( links == NULL ) {
     1104        return FALSE;
     1105    }
     1106
     1107    long pg = currentpage;
     1108    if ( continuous ) {
     1109        double tmp;
     1110        pg = posToPagenum( ypos, &tmp );
     1111    }
     1112
     1113    if ( links[ pg ] != NULL )
     1114    {
     1115        for ( int i = 0; i < links[ pg ]->_length; i++ )
    9841116        {
    9851117            RECTL r = {0};
    986             docPosToWinPos( &(links->_buffer[i].area), &r );
    987 
    988             POINTL ptl = { xpos, ypos };
    989             if ( WinPtInRect( hab, &r, &ptl ) ) {
    990                 WinSetPointer( HWND_DESKTOP, handptr );
    991                 return TRUE;
    992             }
    993         }
    994     }
    995 
    996     return FALSE;
    997 }
    998 
    999 // handles WM_BUTTON1CLICK
    1000 BOOL DocumentViewer::wmClick( HWND hwnd, SHORT xpos, SHORT ypos )
    1001 {
    1002     if ( links != NULL )
    1003     {
    1004         for ( int i = 0; i < links->_length; i++ )
    1005         {
    1006             RECTL r = {0};
    1007             docPosToWinPos( &(links->_buffer[i].area), &r );
     1118            docPosToWinPos( pg, &(links[ pg ]->_buffer[i].area), &r );
    10081119
    10091120            POINTL ptl = { xpos, ypos };
    10101121            if ( WinPtInRect( hab, &r, &ptl ) )
    10111122            {
    1012                 if ( links->_buffer[i].link.type == LU_LINK_TYPE_EXTERNAL_URI )
     1123                if ( links[ pg ]->_buffer[i].link.type == LU_LINK_TYPE_EXTERNAL_URI )
    10131124                {
    10141125                    WinMessageBox( HWND_DESKTOP, hMainFrame,
    1015                         links->_buffer[i].link.uri, "URI", 1,
     1126                        links[ pg ]->_buffer[i].link.uri, "URI", 1,
    10161127                        MB_OK | MB_INFORMATION | MB_MOVEABLE );
    10171128                }
    1018                 else if ( links->_buffer[i].link.type == LU_LINK_TYPE_TITLE )
     1129                else if ( links[ pg ]->_buffer[i].link.type == LU_LINK_TYPE_TITLE )
    10191130                {
    1020                     char *title = links->_buffer[i].link.title;
     1131                    char *title = links[ pg ]->_buffer[i].link.title;
    10211132                    if ( title == NULL ) {
    10221133                        title = "???";
     
    10251136                        title, "?", 1, MB_OK | MB_INFORMATION | MB_MOVEABLE );
    10261137                }
    1027                 else if ( links->_buffer[i].link.type == LU_LINK_TYPE_PAGE )
     1138                else if ( links[ pg ]->_buffer[i].link.type == LU_LINK_TYPE_PAGE )
    10281139                {
    1029                     goToPage( links->_buffer[i].link.page );
     1140                    goToPage( links[ pg ]->_buffer[i].link.page );
    10301141                }
    10311142
  • trunk/Lucide/SOURCE/gui/docViewer.h

    r2 r17  
    33
    44#include <vector>
    5 using namespace std;
    65
    76#include <ludoc.xh>
     
    1817};
    1918
    20 typedef vector<PageDrawArea> DrawAreas;
     19typedef std::vector<PageDrawArea> DrawAreas;
    2120
    2221
     
    4039
    4140        static void registerClass( HAB hab );
     41
    4242        // Internal stuffs
    4343    private:
     
    5656        BOOL wmChar( HWND hwnd, MPARAM mp1, MPARAM mp2 );
    5757        void winPosToDocPos( PPOINTL startpoint, PPOINTL endpoint, LuRectangle *r );
    58         void docPosToWinPos( LuRectangle *r, PRECTL rcl );
     58        void docPosToWinPos( long pagenum, LuRectangle *r, PRECTL rcl );
    5959        HRGN rectsToRegion( HPS hps, LuDocument_LuRectSequence *rects, bool useScale );
    6060        void drawSelection( HPS hps, PRECTL r );
    6161        void scrollToPos( HWND hwnd, HRGN hrgn, SHORT xpos, SHORT ypos, bool withSelection );
    6262        void freeFoundrects();
     63        void freeLinks();
    6364        void drawFound( HPS hps, PRECTL r );
    6465        DrawAreas *foundDrawAreas( PRECTL r );
    65         void foundCurrentPage();
    66         long posToPagenum( double yPos, double *pageRest );
     66        void determineCurrentPage();
     67        long posToPagenum( LONG yPosWin, double *pageRest );
     68        double pagenumToPos( long pagenum );
    6769
    6870        static MRESULT EXPENTRY docViewProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 );
     
    98100        long totalpages, currentpage;
    99101        ProgressDlg *progressDlg;
     102        DrawAreas *drawareas;
     103        int drawareaIndex;
    100104
    101105        // continuous view
     
    103107        LuSize *pagesizes;
    104108        SHORT VScrollStep;
    105         DrawAreas *drawareas;
    106109
    107110        // asynch draw
    108111        bool enableAsynchDraw;
    109         RECTL drawRect;
    110112        HMTX todrawAccess;
    111113        HEV  haveDraw;
     
    122124
    123125        // links
    124         LuDocument_LuLinkMapSequence *links;
     126        LuDocument_LuLinkMapSequence **links;
    125127        HPOINTER handptr;
    126128
     
    134136
    135137#endif // __DOCVIEWER_H
     138
  • trunk/Lucide/SOURCE/gui/makefile

    r2 r17  
    11.autodepend
    22
    3 OBJDIR = D:\Projects\Lucide\OBJS
    4 EXEDIR = D:\Projects\Lucide\BIN
     3OBJDIR = ..\..\OBJS
     4EXEDIR = ..\..\BIN
    55
    66.path.obj = $(OBJDIR)
  • trunk/Lucide/SOURCE/plugins/ludjvu/makefile

    r2 r17  
    11.autodepend
    22
    3 OBJDIR = D:\Projects\Lucide\OBJS
    4 EXEDIR = D:\Projects\Lucide\BIN
     3OBJDIR = ..\..\..\OBJS
     4EXEDIR = ..\..\..\BIN
    55
    66.path.obj = $(OBJDIR)
     
    2929file $(OBJDIR)\ludjvu.obj
    3030name $(EXEDIR)\ludjvu
    31 lib D:\Projects\libdjvu\libdjvu\ddjvuapi.lib
     31lib ..\..\..\..\libdjvu\ddjvuapi.lib
    3232lib ..\ludoc\ludoc
    3333lib somtk
    3434export LuDjvuDocumentNewClass
    35 export LuDjvuDocumentClassData
    36 export LuDjvuDocumentCClassData
     35export _LuDjvuDocumentClassData
     36export _LuDjvuDocumentCClassData
    3737export createObject
    3838export getSupportedExtensions
     
    5757-xr
    5858-I..\ludoc
    59 -ID:\Projects\libdjvu
     59-I..\..\..\..\libdjvu
    6060-DOS2
    6161| MAKE.CFG >NUL
  • trunk/Lucide/SOURCE/plugins/ludoc/makefile

    r2 r17  
    11.autodepend
    22
    3 OBJDIR = D:\Projects\Lucide\OBJS
    4 EXEDIR = D:\Projects\Lucide\BIN
     3OBJDIR = ..\..\..\OBJS
     4EXEDIR = ..\..\..\BIN
    55
    66.path.obj = $(OBJDIR)
     
    3232name $(EXEDIR)\ludoc
    3333lib somtk
    34 lib D:\BCOS2\LIB\libconv.lib
     34lib libconv
    3535export LuDocumentNewClass
    36 export LuDocumentClassData
    37 export LuDocumentCClassData
     36export _LuDocumentClassData
     37export _LuDocumentCClassData
    3838export LuPixbufNewClass
    39 export LuPixbufClassData
    40 export LuPixbufCClassData
     39export _LuPixbufClassData
     40export _LuPixbufCClassData
    4141export LuIndexNodeNewClass
    42 export LuIndexNodeClassData
    43 export LuIndexNodeCClassData
     42export _LuIndexNodeClassData
     43export _LuIndexNodeCClassData
    4444export createObject
    4545export getSupportedExtensions
     
    8282-xs
    8383-xr
    84 -ID:\BCOS2\H_UNI
    8584-DOS2
    8685| MAKE.CFG >NUL
  • trunk/Lucide/SOURCE/plugins/lujpeg/makefile

    r2 r17  
    11.autodepend
    22
    3 OBJDIR = D:\Projects\Lucide\OBJS
    4 EXEDIR = D:\Projects\Lucide\BIN
     3OBJDIR = ..\..\..\OBJS
     4EXEDIR = ..\..\..\BIN
    55
    66.path.obj = $(OBJDIR)
     
    2929file $(OBJDIR)\lujpeg.obj
    3030name $(EXEDIR)\lujpeg
    31 lib D:\Projects\libjpeg\libjpeg.lib
     31lib ..\..\..\..\libjpeg\libjpeg.lib
    3232lib ..\ludoc\ludoc
    3333lib somtk
    3434export LuJpegDocumentNewClass
    35 export LuJpegDocumentClassData
    36 export LuJpegDocumentCClassData
     35export _LuJpegDocumentClassData
     36export _LuJpegDocumentCClassData
    3737export createObject
    3838export getSupportedExtensions
  • trunk/Lucide/SOURCE/plugins/lupoppler/makefile

    r2 r17  
    11.autodepend
    22
    3 OBJDIR = D:\Projects\Lucide\OBJS
    4 EXEDIR = D:\Projects\Lucide\BIN
     3OBJDIR = ..\..\..\OBJS
     4EXEDIR = ..\..\..\BIN
    55
    66.path.obj = $(OBJDIR)
     
    2828file $(OBJDIR)\lupoppler.obj
    2929name $(EXEDIR)\lupplr
    30 lib D:\Projects\poppler\mypoppler\poppler.lib
    31 lib D:\Projects\poppler\mypoppler\ft2lib.lib
     30lib ..\..\..\..\poppler\poppler.lib
    3231lib ..\ludoc\ludoc
    3332lib somtk
    3433export LuPopplerDocumentNewClass
    35 export LuPopplerDocumentClassData
    36 export LuPopplerDocumentCClassData
     34export _LuPopplerDocumentClassData
     35export _LuPopplerDocumentCClassData
    3736export createObject
    3837export getSupportedExtensions
     
    5655-xr
    5756-I..\ludoc
    58 -ID:\Projects\poppler\mypoppler
    59 -ID:\Projects\poppler\mypoppler\poppler
    60 -ID:\Projects\poppler\fontconfig-2.3.2-os2
     57-I..\..\..\..\poppler\mypoppler
     58-I..\..\..\..\poppler\mypoppler\poppler
     59-I..\..\..\..\poppler\fontconfig-2.3.2-os2
    6160-DOS2
    6261| MAKE.CFG >NUL
  • trunk/libdjvu/Arrays.cpp

    r15 r17  
    5353//
    5454// $Id: Arrays.cpp,v 1.8 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/Arrays.h

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: Arrays.h,v 1.10 2004/05/13 15:16:34 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: Arrays.h,v 1.11 2005/12/28 07:54:50 leonb Exp $
     55// $Name: $
    5656
    5757#ifndef _ARRAYS_H_
     
    124124    Andrei Erofeev <eaf@geocities.com> -- Copy-on-demand implementation.
    125125    @version
    126     #$Id: Arrays.h,v 1.10 2004/05/13 15:16:34 leonb Exp $# */
     126    #$Id: Arrays.h,v 1.11 2005/12/28 07:54:50 leonb Exp $# */
    127127//@{
    128128
     
    481481   operator const TYPE* () const;
    482482   
    483 #ifndef __MWERKS__ //MCW can't compile
    484    operator const TYPE* ();
    485 #endif 
    486483   /** Insert new elements into an array. This function inserts
    487484       #howmany# elements at position #n# into the array. The initial value #val#
     
    529526   return &((TYPE *) rep->data)[-rep->minlo];
    530527}
    531 
    532 #ifndef __MWERKS__ //MCW can't compile
    533 template <class TYPE> inline
    534 ArrayBaseT<TYPE>::operator const TYPE* ()
    535 {
    536    const ArrayRep * rep=(const ArrayRep *) get();
    537    return &((const TYPE *) rep->data)[-rep->minlo];
    538 }
    539 #endif
    540528
    541529template <class TYPE> inline
  • trunk/libdjvu/BSByteStream.cpp

    r15 r17  
    5353//
    5454// $Id: BSByteStream.cpp,v 1.8 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/BSByteStream.h

    r15 r17  
    5353//
    5454// $Id: BSByteStream.h,v 1.8 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _BSBYTESTREAM_H
  • trunk/libdjvu/BSEncodeByteStream.cpp

    r15 r17  
    5353//
    5454// $Id: BSEncodeByteStream.cpp,v 1.8 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/ByteStream.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: ByteStream.cpp,v 1.18 2004/08/06 14:50:05 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: ByteStream.cpp,v 1.20 2005/12/24 12:45:01 leonb Exp $
     55// $Name: $
    5656
    5757// From: Leon Bottou, 1/31/2002
     
    11971197
    11981198GP<ByteStream>
    1199 ByteStream::create_static(const void * const buffer, size_t sz)
     1199ByteStream::create_static(const void * buffer, size_t sz)
    12001200{
    12011201  return new Static(buffer, sz);
     
    12891289
    12901290GP<ByteStream>
    1291 ByteStream::get_stdin(char const * const mode)
     1291ByteStream::get_stdin(char const *mode)
    12921292{
    12931293  static GP<ByteStream> gp = ByteStream::create(0,mode,false);
     
    12961296
    12971297GP<ByteStream>
    1298 ByteStream::get_stdout(char const * const mode)
     1298ByteStream::get_stdout(char const *mode)
    12991299{
    13001300  static GP<ByteStream> gp = ByteStream::create(1,mode,false);
     
    13031303
    13041304GP<ByteStream>
    1305 ByteStream::get_stderr(char const * const mode)
     1305ByteStream::get_stderr(char const *mode)
    13061306{
    13071307  static GP<ByteStream> gp = ByteStream::create(2,mode,false);
  • trunk/libdjvu/ByteStream.h

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: ByteStream.h,v 1.11 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: ByteStream.h,v 1.13 2006/01/31 15:28:30 leonb Exp $
     55// $Name: $
    5656
    5757#ifndef _BYTESTREAM_H
     
    9898
    9999    @version
    100     #$Id: ByteStream.h,v 1.11 2003/11/07 22:08:20 leonb Exp $# */
     100    #$Id: ByteStream.h,v 1.13 2006/01/31 15:28:30 leonb Exp $# */
    101101//@{
    102102
     
    243243  void formatmessage( const char *fmt, ... );
    244244  /** Looks up the message and writes it to the specified stream. */
    245   void ByteStream::writemessage( const char *message );
     245  void writemessage( const char *message );
    246246  /** Writes a one-byte integer to a ByteStream. */
    247247  void write8 (unsigned int card8);
     
    335335      access this memory area.  The user must therefore make sure that its
    336336      content remain valid long enough.  */
    337   static GP<ByteStream> create_static(
    338     void const * const buffer, const size_t size);
     337  static GP<ByteStream> create_static(void const *buffer, size_t size);
    339338 
    340339  /** Easy access to preallocated stdin/stdout/stderr bytestreams */
    341   static GP<ByteStream> get_stdin(char const * const mode=0);
    342   static GP<ByteStream> get_stdout(char const * const mode=0); 
    343   static GP<ByteStream> get_stderr(char const * const mode=0);
     340  static GP<ByteStream> get_stdin(char const * mode=0);
     341  static GP<ByteStream> get_stdout(char const * mode=0); 
     342  static GP<ByteStream> get_stderr(char const * mode=0);
    344343
    345344  /** This is the conventional name for EOF exceptions */
  • trunk/libdjvu/DataPool.cpp

    r15 r17  
    5353//
    5454// $Id: DataPool.cpp,v 1.11 2004/08/06 15:11:29 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DataPool.h

    r15 r17  
    5353//
    5454// $Id: DataPool.h,v 1.10 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DATAPOOL_H
  • trunk/libdjvu/DjVmDir.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: DjVmDir.cpp,v 1.10 2004/05/05 15:12:42 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: DjVmDir.cpp,v 1.11 2005/12/30 15:22:16 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    564564}
    565565
     566GP<DjVmDir::File>
     567DjVmDir::pos_to_file(int fileno, int *ppageno) const
     568{
     569  GCriticalSectionLock lock((GCriticalSection *) &class_lock);
     570  GPosition pos = files_list;
     571  int pageno = 0;
     572  while (pos && --fileno >= 0) {
     573    if (files_list[pos]->is_page())
     574      ++pageno;
     575    ++pos;
     576  }
     577  if (!pos)
     578    return 0;
     579  if (ppageno)
     580    *ppageno = pageno;
     581  return files_list[pos];
     582}
     583
    566584GPList<DjVmDir::File>
    567585DjVmDir::get_files_list(void) const
     
    626644DjVmDir::insert_file(const GP<File> & file, int pos_num)
    627645{
    628    DEBUG_MSG("DjVmDir::insert_file(): name='" << file->name << "', pos=" << pos_num << "\n");
     646   DEBUG_MSG("DjVmDir::insert_file(): name='"
     647             << file->name << "', pos=" << pos_num << "\n");
    629648   DEBUG_MAKE_INDENT(3);
    630649   
     
    634653     pos_num=files_list.size();
    635654
    636       // Modify maps
    637 //   if (! File::is_legal_id(file->id))
    638 //     G_THROW( ERR_MSG("DjVmDir.bad_file") "\t" + file->id);
     655   //// Modify maps
     656   //   if (! File::is_legal_id(file->id))
     657   //     G_THROW( ERR_MSG("DjVmDir.bad_file") "\t" + file->id);
    639658   if (id2file.contains(file->id))
    640659     G_THROW( ERR_MSG("DjVmDir.dupl_id2") "\t" + file->id);
     
    645664   if (file->title.length())
    646665     {
    647        if (title2file.contains(file->title))  // duplicate titles may become ok some day
     666       if (title2file.contains(file->title)) 
     667         // duplicate titles may become ok some day
    648668         G_THROW( ERR_MSG("DjVmDir.dupl_title2") "\t" + file->title);
    649669       title2file[file->title]=file;
  • trunk/libdjvu/DjVmDir.h

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: DjVmDir.h,v 1.10 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: DjVmDir.h,v 1.11 2005/12/30 15:22:16 leonb Exp $
     55// $Name: $
    5656
    5757#ifndef _DJVMDIR_H
     
    112112    @author Andrei Erofeev <eaf@geocities.com>
    113113    @version
    114     #$Id: DjVmDir.h,v 1.10 2003/11/07 22:08:20 leonb Exp $# */
     114    #$Id: DjVmDir.h,v 1.11 2005/12/30 15:22:16 leonb Exp $# */
    115115//@{
    116116
     
    169169      /** Encodes the directory into the specified stream. */
    170170   void encode(const GP<ByteStream> &stream, const bool do_rename=false) const;
    171       /** Encodes the directory into the specified stream, explicitely as bundled or indirect. */
    172    void encode(const GP<ByteStream> &stream, const bool bundled, const bool do_rename) const;
     171      /** Encodes the directory into the specified stream,
     172          explicitely as bundled or indirect. */
     173  void encode(const GP<ByteStream> &stream,
     174              const bool bundled, const bool do_rename) const;
    173175      /** Tests if directory defines an {\em indirect} document. */
    174176   bool is_indirect(void) const;
     
    183185      /** Translates file shortcuts to file records. */
    184186   GP<File> title_to_file(const GUTF8String &title) const;
     187      /** Access file record by position. */
     188   GP<File> pos_to_file(int fileno, int *ppageno=0) const;
    185189      /** Returns position of the file in the directory. */
    186190   int get_file_pos(const File * f) const;
  • trunk/libdjvu/DjVmDir0.cpp

    r15 r17  
    5353//
    5454// $Id: DjVmDir0.cpp,v 1.8 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVmDir0.h

    r15 r17  
    5353//
    5454// $Id: DjVmDir0.h,v 1.8 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVMDIR0_H
  • trunk/libdjvu/DjVmDoc.cpp

    r15 r17  
    5353//
    5454// $Id: DjVmDoc.cpp,v 1.10 2005/05/25 20:24:52 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVmDoc.h

    r15 r17  
    5353//
    5454// $Id: DjVmDoc.h,v 1.10 2005/05/25 20:24:52 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVMDOC_H
  • trunk/libdjvu/DjVmNav.cpp

    r15 r17  
    5353//
    5454// $Id: DjVmNav.cpp,v 1.1 2005/05/25 17:36:53 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVmNav.h

    r15 r17  
    5353//
    5454// $Id: DjVmNav.h,v 1.1 2005/05/25 17:36:53 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVMNAV_H
  • trunk/libdjvu/DjVuAnno.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: DjVuAnno.cpp,v 1.12 2004/04/17 23:56:11 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: DjVuAnno.cpp,v 1.13 2006/01/09 15:28:46 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    12961296      //*** Zoom
    12971297   del_all_items(ZOOM_TAG, parser);
    1298    if (zoom!=ZOOM_UNSPEC)
     1298   if (zoom>0 || (zoom>=ZOOM_STRETCH && zoom<=ZOOM_PAGE))
    12991299   {
    13001300      buffer="(" ZOOM_TAG " ";
    1301       const int i=1-zoom;
    1302       if((i>=0)&& (i<zoom_strings_size))
    1303       {
    1304         buffer+=zoom_strings[i];
    1305       }else
    1306       {
    1307         buffer+="d"+GUTF8String(zoom);
    1308       }
     1301      if (zoom < 0)
     1302        buffer += zoom_strings[-zoom];
     1303      else
     1304        buffer += "d"+GUTF8String(zoom);
    13091305      buffer+=")";
    13101306      parser.parse(buffer);
  • trunk/libdjvu/DjVuAnno.h

    r15 r17  
    5353//
    5454// $Id: DjVuAnno.h,v 1.8 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUANNO_H
  • trunk/libdjvu/DjVuDocEditor.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuDocEditor.cpp,v 1.13 2005/05/25 20:24:52 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuDocEditor.h

    r15 r17  
    5353//
    5454// $Id: DjVuDocEditor.h,v 1.9 2005/05/25 20:24:52 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUDOCEDITOR_H
  • trunk/libdjvu/DjVuDocument.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: DjVuDocument.cpp,v 1.14 2005/08/07 21:32:27 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: DjVuDocument.cpp,v 1.15 2006/01/19 15:20:41 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    284284    th->init_thread();
    285285  } G_CATCH(exc) {
    286     th->flags|=DjVuDocument::DOC_INIT_FAILED;
     286    G_TRY {
     287      int changed = DjVuDocument::DOC_INIT_FAILED;
     288      th->flags |= changed;
     289      get_portcaster()->notify_doc_flags_changed(th, changed, 0);
     290    } G_CATCH_ALL {
     291    } G_ENDCATCH;
    287292    G_TRY {
    288293      th->check_unnamed_files();
    289294      if (!exc.cmp_cause(ByteStream::EndOfFile) && th->verbose_eof)
    290         get_portcaster()->notify_error(th, ERR_MSG("DjVuDocument.init_eof") );
     295        get_portcaster()->notify_error(th, ERR_MSG("DjVuDocument.init_eof"));
    291296      else if (!exc.cmp_cause(DataPool::Stop))
    292         get_portcaster()->notify_status(th, ERR_MSG("DjVuDocument.stopped") );
     297        get_portcaster()->notify_status(th, ERR_MSG("DjVuDocument.stopped"));
    293298      else
    294299        get_portcaster()->notify_error(th, exc.get_cause());
    295     } G_CATCH_ALL {} G_ENDCATCH;
    296     th->init_thread_flags|=FINISHED;
     300    } G_CATCH_ALL {
     301    } G_ENDCATCH;
     302    th->init_thread_flags |= FINISHED;
    297303  } G_ENDCATCH;
    298304}
     
    320326     G_THROW( ERR_MSG("DjVuDocument.no_file") );
    321327   if (size<8)
    322    {
    323328     G_THROW( ERR_MSG("DjVuDocument.not_DjVu") );
    324    }
    325329   if (chkid=="FORM:DJVM")
    326330   {
     
    345349           }
    346350         flags|=DOC_TYPE_KNOWN | DOC_DIR_KNOWN;
    347          pcaster->notify_doc_flags_changed(this, DOC_TYPE_KNOWN | DOC_DIR_KNOWN, 0);
     351         pcaster->notify_doc_flags_changed(this,
     352                                           DOC_TYPE_KNOWN | DOC_DIR_KNOWN, 0);
    348353         check_unnamed_files();
    349354         
     
    385390             size=iff.get_chunk(chkid, &offset);
    386391             if (size==0) G_THROW( ERR_MSG("DjVuDocument.no_page") );
    387              if (chkid=="FORM:DJVU" || chkid=="FORM:PM44" || chkid=="FORM:BM44")
     392             if (chkid=="FORM:DJVU" ||
     393                 chkid=="FORM:PM44" || chkid=="FORM:BM44")
    388394               {
    389395                 DEBUG_MSG("Got 1st page offset=" << offset << "\n");
     
    416422       DEBUG_MSG("Got DJVU OLD_INDEXED or SINGLE_PAGE document here.\n");
    417423       doc_type=SINGLE_PAGE;
    418        flags|=DOC_TYPE_KNOWN;
     424       flags |= DOC_TYPE_KNOWN;
    419425       pcaster->notify_doc_flags_changed(this, DOC_TYPE_KNOWN, 0);
    420426       check_unnamed_files();
     
    450456     }
    451457   
    452    flags|=DOC_INIT_OK;
     458   flags |= DOC_INIT_OK;
    453459   pcaster->notify_doc_flags_changed(this, DOC_INIT_OK, 0);
    454460   check_unnamed_files();
  • trunk/libdjvu/DjVuDocument.h

    r15 r17  
    5353//
    5454// $Id: DjVuDocument.h,v 1.10 2005/05/25 20:24:52 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUDOCUMENT_H
  • trunk/libdjvu/DjVuDumpHelper.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuDumpHelper.cpp,v 1.9 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuDumpHelper.h

    r15 r17  
    5353//
    5454// $Id: DjVuDumpHelper.h,v 1.9 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUDUMPHELPER_H
  • trunk/libdjvu/DjVuErrorList.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuErrorList.cpp,v 1.8 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuErrorList.h

    r15 r17  
    5353//
    5454// $Id: DjVuErrorList.h,v 1.9 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUERRORLIST_H
  • trunk/libdjvu/DjVuFile.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: DjVuFile.cpp,v 1.11 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: DjVuFile.cpp,v 1.12 2005/12/24 12:45:01 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    885885      G_THROW( ERR_MSG("DjVuFile.corrupt_zero") );
    886886    if (info->version >= DJVUVERSION_TOO_NEW)
    887       G_THROW( ERR_MSG("DjVuFile.new_version") "\t" STRINGIFY(DJVUVERSION_TOO_NEW) );
    888     if(info->compressable)
    889       set_can_compress(true);
     887      G_THROW( ERR_MSG("DjVuFile.new_version") "\t"
     888               STRINGIFY(DJVUVERSION_TOO_NEW) );
    890889  }
    891890 
  • trunk/libdjvu/DjVuFile.h

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: DjVuFile.h,v 1.9 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: DjVuFile.h,v 1.10 2005/12/24 12:45:01 leonb Exp $
     55// $Name: $
    5656
    5757#ifndef _DJVUFILE_H
     
    103103    @memo Classes representing DjVu files.
    104104    @author Andrei Erofeev <eaf@geocities.com>
    105     @version #$Id: DjVuFile.h,v 1.9 2003/11/07 22:08:20 leonb Exp $#
     105    @version #$Id: DjVuFile.h,v 1.10 2005/12/24 12:45:01 leonb Exp $#
    106106*/
    107107
     
    781781DjVuFile::set_can_compress(bool m)
    782782{
    783    if(info)
    784    {
    785      info->compressable=m;
    786    }
    787783   if (m)
    788    {
    789784     flags=flags | CAN_COMPRESS;
    790    } else
    791    {
     785   else
    792786     flags=flags & ~CAN_COMPRESS;
    793    }
    794787}
    795788
  • trunk/libdjvu/DjVuFileCache.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuFileCache.cpp,v 1.9 2004/08/06 15:11:29 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuFileCache.h

    r15 r17  
    5353//
    5454// $Id: DjVuFileCache.h,v 1.8 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUFILECACHE_H
  • trunk/libdjvu/DjVuGlobal.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuGlobal.cpp,v 1.7 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuGlobal.h

    r15 r17  
    5353//
    5454// $Id: DjVuGlobal.h,v 1.10 2004/08/04 02:36:59 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUGLOBAL_H
  • trunk/libdjvu/DjVuGlobalMemory.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuGlobalMemory.cpp,v 1.6 2003/11/07 22:08:20 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuImage.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: DjVuImage.cpp,v 1.10 2005/04/27 16:34:13 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: DjVuImage.cpp,v 1.13 2006/01/19 15:20:41 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    10751075    GRect rect=inrect;
    10761076    GRect all=inall;
    1077 ///* rotate code
    1078     if( dimg.get_rotate()%4 )
     1077    if( dimg.get_rotate() )
    10791078    {
    10801079        GRectMapper mapper;
    1081         mapper.rotate((4-dimg.get_rotate())%4);
     1080        mapper.rotate(-dimg.get_rotate());
    10821081        mapper.map(rect);
    10831082        mapper.map(all);
    10841083    }
    1085 ///* rotate code ends
    10861084
    10871085  // Sanity
     
    11031101        GP<GBitmap> bm=(dimg.*get)(zrect, red, align);
    11041102        if(bm)
    1105             return bm->rotate((4-dimg.get_rotate())%4);
     1103            return bm->rotate(dimg.get_rotate());
    11061104        else
    11071105                return NULL;
     
    11131111      break;
    11141112  // Setup bitmap scaler
    1115   if (! (w && h)) return 0;
     1113  if (w<=0 || h<=0) return 0;
    11161114  GP<GBitmapScaler> gbs=GBitmapScaler::create();
    11171115  GBitmapScaler &bs=*gbs;
     
    11291127  bs.scale(srect, *sbm, zrect, *bm);
    11301128  if( bm )
    1131       return bm->rotate((4-dimg.get_rotate())%4);
     1129      return bm->rotate(dimg.get_rotate());
    11321130  else
    11331131      return NULL;
     
    11381136          const GRect &inrect, const GRect &inall, double gamma )
    11391137{
    1140 
    11411138    GRect rect=inrect;
    11421139    GRect all=inall;
    1143 ///* rotate code
    11441140    if( dimg.get_rotate()%4 )
    11451141    {
    11461142        GRectMapper mapper;
    1147         mapper.rotate((4-dimg.get_rotate())%4);
     1143      mapper.rotate(-dimg.get_rotate());
    11481144        mapper.map(rect);
    11491145        mapper.map(all);
    11501146    }
    1151 ///* rotate code ends
    11521147
    11531148  // Sanity
     
    11701165        GP<GPixmap> pm = (dimg.*get)(zrect, red, gamma);
    11711166        if( pm )
    1172             return pm->rotate((4-dimg.get_rotate())%4);
     1167            return pm->rotate(dimg.get_rotate());
    11731168        else
    11741169            return NULL;
     
    11821177      break;
    11831178  // Setup pixmap scaler
    1184   if (w<0 || h<0) return 0;
     1179  if (w<=0 || h<=0) return 0;
    11851180  GP<GPixmapScaler> gps=GPixmapScaler::create();
    11861181  GPixmapScaler &ps=*gps;
     
    11971192  ps.scale(srect, *spm, zrect, *pm);
    11981193  if(pm)
    1199       return pm->rotate((4-dimg.get_rotate())%4);
     1194      return pm->rotate(dimg.get_rotate());
    12001195  else
    12011196      return NULL;
     
    12291224DjVuImage::get_rotate() const
    12301225{
    1231   return (rotate_count<0)?0:rotate_count;
     1226  return (rotate_count<0) ? 0 : rotate_count;
    12321227}
    12331228
     
    12351230DjVuImage::init_rotate(const DjVuInfo &info)
    12361231{
    1237   rotate_count=((360-GRect::findangle(info.orientation))/90)%4;
     1232  rotate_count = info.orientation;
    12381233}
    12391234
    12401235void DjVuImage::set_rotate(int count)
    12411236{
    1242   rotate_count=((count%4)+4)%4;
     1237  rotate_count = count % 4;
    12431238}
    12441239
     
    12461241DjVuImage::get_decoded_anno()
    12471242{
     1243    GP<DjVuInfo> djvuinfo = get_info();
    12481244    GP<DjVuAnno> djvuanno = DjVuAnno::create();
    12491245    GP<ByteStream> bs=get_anno();
    12501246    if( bs )
    12511247    {
     1248      int rotate_count=get_rotate();
     1249      /// Brain damaged adjustment of annotation
     1250      /// coordinates that reflect the orientation
     1251      /// flag in the info chunk....
     1252      if (djvuinfo)
     1253        rotate_count = rotate_count - djvuinfo->orientation;
     1254      ///decode
    12521255        djvuanno->decode(bs);
    1253        
    1254         const int rotate_count=get_rotate();
    1255         if( rotate_count % 4 )
     1256            ///map hyperlinks correctly for rotation           
     1257      if( rotate_count & 3 )
    12561258        {   
    1257             ///map hyperlinks correctly for rotation           
    12581259            GRect input, output;
    1259             input = GRect(0,0,get_width(), get_height());
    1260             output = GRect(0,0,  get_real_width(), get_real_height());
    1261 
     1260          input = GRect(0,0,get_width(),get_height());
     1261          if (rotate_count & 1)
     1262            output = GRect(0,0,get_height(),get_width());
     1263          else
     1264            output = GRect(0,0,get_width(),get_height());
    12621265            GRectMapper mapper;
    12631266            mapper.clear();
    12641267            mapper.set_input(input);
    12651268            mapper.set_output(output);               
    1266             mapper.rotate((4-rotate_count)%4);
    1267 
     1269          mapper.rotate(-rotate_count);
    12681270            GPList<GMapArea> &list=djvuanno->ant->map_areas;
    12691271            for(GPosition pos=list;pos;++pos)
    1270             {
    12711272                list[pos]->unmap(mapper);
    12721273            }
    1273         }
    12741274        return djvuanno;
    12751275    }
     
    12841284    GRect input, output;
    12851285    const int rotate_count=get_rotate();
    1286     if(rotate_count%4)
     1286    if(rotate_count>0)
    12871287    { 
    12881288        input = GRect(0,0,get_width(), get_height());
     
    12931293        mapper.set_input(input);
    12941294        mapper.set_output(output);               
    1295         mapper.rotate((4-rotate_count)%4);
     1295        mapper.rotate(-rotate_count);
    12961296        mapper.map(rect);
    12971297    }
     
    13031303    GRect input, output;
    13041304    const int rotate_count=get_rotate();
    1305     if(rotate_count%4)
     1305    if(rotate_count>0)
    13061306    { 
    13071307        input = GRect(0,0,get_width(), get_height());
     
    13121312        mapper.set_input(input);
    13131313        mapper.set_output(output);               
    1314         mapper.rotate((4-rotate_count)%4);
     1314        mapper.rotate(-rotate_count);
    13151315        mapper.unmap(rect);
    13161316    }
     
    13221322    GRect input, output;
    13231323    const int rotate_count=get_rotate();
    1324     if(rotate_count%4)
     1324    if(rotate_count>0)
    13251325    { 
    13261326        input = GRect(0,0,get_width(), get_height());
     
    13311331        mapper.set_input(input);
    13321332        mapper.set_output(output);               
    1333         mapper.rotate((4-rotate_count)%4);
     1333        mapper.rotate(-rotate_count);
    13341334        mapper.map(x, y);
    13351335    }
     
    13411341    GRect input, output;
    13421342    const int rotate_count=get_rotate();
    1343     if(rotate_count%4)
     1343    if(rotate_count>0)
    13441344    { 
    13451345        input = GRect(0,0,get_width(), get_height());
     
    13501350        mapper.set_input(input);
    13511351        mapper.set_output(output);               
    1352         mapper.rotate((4-rotate_count)%4);
     1352        mapper.rotate(-rotate_count);
    13531353        mapper.unmap(x, y);
    13541354    }
  • trunk/libdjvu/DjVuImage.h

    r15 r17  
    5353//
    5454// $Id: DjVuImage.h,v 1.9 2005/04/27 16:34:13 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUIMAGE_H
  • trunk/libdjvu/DjVuInfo.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: DjVuInfo.cpp,v 1.9 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: DjVuInfo.cpp,v 1.10 2005/12/24 12:45:01 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    9090    version(DJVUVERSION),
    9191#endif
    92     dpi(300), gamma(2.2), compressable(false), orientation(GRect::BULRNR)
     92    dpi(300), gamma(2.2), orientation(0)
    9393{
    9494}
     
    103103  dpi = 300;
    104104  gamma = 2.2;
    105   compressable=false;
    106   orientation=GRect::BULRNR;
     105  orientation=0;
    107106  // Read data
    108107  unsigned char buffer[10];
     
    135134  if (dpi < 25 || dpi > 6000)
    136135    dpi = 300;
    137   if(flags&COMPRESSABLE_FLAG)
    138     compressable=true;
    139   if(version>=DJVUVERSION_ORIENTATION)
     136  switch (flags & 0x7)
    140137  {
    141     orientation=(GRect::Orientations)(flags&((int)GRect::BOTTOM_UP|(int)GRect::MIRROR|(int)GRect::ROTATE90_CW));
     138    case 6:  orientation=1; break;
     139    case 2:  orientation=2; break;
     140    case 5:  orientation=3; break;
     141    default: orientation=0; break;
    142142  }
    143143}
     
    153153  bs.write8(dpi >> 8);
    154154  bs.write8((int)(10.0*gamma+0.5) );
    155   unsigned char flags=orientation;
    156   if(compressable)
     155  unsigned char flags;
     156  switch (orientation)
    157157  {
    158     flags|=COMPRESSABLE_FLAG;
     158    default: flags=0; break;
     159    case 1:  flags=6; break;
     160    case 2:  flags=2; break;
     161    case 3:  flags=5; break;
    159162  }
    160163  bs.write8(flags);
     
    170173DjVuInfo::get_paramtags(void) const
    171174{
    172   const int angle=GRect::findangle(orientation);
    173175  GUTF8String retval;
    174   if(angle)
    175   {
    176     retval+="<PARAM name=\"ROTATE\" value=\""+GUTF8String(angle)+"\" />\n";
    177   }
    178   if(orientation == GRect::rotate(angle,GRect::TDLRNR))
    179   {
    180     retval+="<PARAM name=\"VFLIP\" value=\"true\" />\n";
    181   }
     176  if(orientation)
     177    retval+="<PARAM name=\"ROTATE\" value=\""
     178      +GUTF8String(((4-orientation)%4)*90)+"\" />\n";
    182179  if(dpi)
    183   {
    184     retval+="<PARAM name=\"DPI\" value=\""+GUTF8String(dpi)+"\" />\n";
    185   }
     180    retval+="<PARAM name=\"DPI\" value=\""
     181      +GUTF8String(dpi)+"\" />\n";
    186182  if(gamma)
    187   {
    188     retval+="<PARAM name=\"GAMMA\" value=\""+GUTF8String(gamma)+"\" />\n";
    189   }
     183    retval+="<PARAM name=\"GAMMA\" value=\""
     184      +GUTF8String(gamma)+"\" />\n";
    190185  return retval;
    191186}
  • trunk/libdjvu/DjVuInfo.h

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: DjVuInfo.h,v 1.12 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: DjVuInfo.h,v 1.15 2005/12/24 12:45:01 leonb Exp $
     55// $Name: $
    5656
    5757#ifndef _DJVUINFO_H
     
    7474    L\'eon Bottou <leonb@research.att.com>
    7575    @version
    76     #$Id: DjVuInfo.h,v 1.12 2003/11/07 22:08:21 leonb Exp $# */
     76    #$Id: DjVuInfo.h,v 1.15 2005/12/24 12:45:01 leonb Exp $# */
    7777//@{
    7878
     
    9797    version of the DjVu file format implemented by this release of the DjVu
    9898    Reference Library. */
    99 #define DJVUVERSION              25
     99#define DJVUVERSION              26
    100100/** DjVu format version. This is the value used in files produced
    101101    with DjVuLibre. This is smaller than DJVUVERSION because version
    102     number inflation causes problems with older software.
    103  */
     102    number inflation causes problems with older software. */
    104103#define DJVUVERSION_FOR_OUTPUT   24
    105104/** This is the version which introduced orientations. */
     
    165164      correction for the intended display device. */
    166165  double gamma;
    167   /** The following boolian values are stored in the last character of the
    168       info structure.  Unused bits are reserved for possible future extensions
    169       and backwards compatability. */
    170   bool compressable;
    171   enum {COMPRESSABLE_FLAG=0x80,RESERVED_FLAGS1=0x7f};
    172166
    173   /** We also store the current image orientation as three bits. */
    174   GRect::Orientations orientation;
     167  /** Image orientation:
     168      0: no rotation      1: 90 degrees counter-clockwise
     169      2: 180 degrees      3: 270 degrees counter-clockwise */
     170  int orientation;
    175171
    176172     /// Obtain the flags for the default specifications.
  • trunk/libdjvu/DjVuMessage.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuMessage.cpp,v 1.17 2005/08/07 21:32:28 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuMessage.h

    r15 r17  
    5353//
    5454// $Id: DjVuMessage.h,v 1.9 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757
  • trunk/libdjvu/DjVuMessageLite.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuMessageLite.cpp,v 1.13 2005/04/27 16:34:13 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuMessageLite.h

    r15 r17  
    5353//
    5454// $Id: DjVuMessageLite.h,v 1.9 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef __DJVU_MESSAGE_LITE_H__
  • trunk/libdjvu/DjVuNavDir.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuNavDir.cpp,v 1.8 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuNavDir.h

    r15 r17  
    5353//
    5454// $Id: DjVuNavDir.h,v 1.8 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUNAVDIR_H
  • trunk/libdjvu/DjVuPalette.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: DjVuPalette.cpp,v 1.11 2004/03/18 15:03:50 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: DjVuPalette.cpp,v 1.12 2006/02/21 16:10:29 docbill Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    233233  int ncolors = 0;
    234234  GTArray<PData> pdata;
    235   for (GPosition p = *hist; p; ++p)
     235  { // extra nesting for windows
     236    for (GPosition p = *hist; p; ++p)
    236237    {
    237238      pdata.touch(ncolors);
     
    244245      sum += data.w;
    245246    }
     247  }
    246248  // Create first box
    247249  GList<PBox> boxes;
     
    269271      pmax[1] = pmin[1] = splitbox.data->p[1];
    270272      pmax[2] = pmin[2] = splitbox.data->p[2];
    271       for (int j=1; j<splitbox.colors; j++)
     273      { // extra nesting for windows
     274        for (int j=1; j<splitbox.colors; j++)
    272275        {
    273276          pmax[0] = umax(pmax[0], splitbox.data[j].p[0]);
     
    278281          pmin[2] = umin(pmin[2], splitbox.data[j].p[2]);
    279282        }
     283      }
    280284      // Determine split direction and sort
    281285      int bl = pmax[0]-pmin[0];
     
    317321  palette.empty();
    318322  palette.resize(0,boxes.size()-1);
    319   for (GPosition p=boxes; p; ++p)
     323  { // extra nesting for windows
     324    for (GPosition p=boxes; p; ++p)
    320325    {
    321326      PBox &box = boxes[p];
     
    337342      color.p[3] = ( color.p[0]*BMUL + color.p[1]*GMUL + color.p[2]*RMUL) / SMUL;
    338343    }
     344  }
    339345  // Save dominant color
    340346  PColor dcolor = palette[0];
     
    356362  // Prepare histogram
    357363  histogram_clear();
    358   for (int j=0; j<(int)pm.rows(); j++)
     364  { // extra nesting for windows
     365    for (int j=0; j<(int)pm.rows(); j++)
    359366    {
    360367      const GPixel *p = pm[j];
     
    362369        histogram_add(p[i], 1);
    363370    }
     371  }
    364372  // Compute palette
    365373  return compute_palette(ncolors, minboxsize);
     
    392400  int found = 0;
    393401  int founddist = 3*256*256;
    394   for (int i=0; i<ncolors; i++)
     402  { // extra nesting for windows
     403    for (int i=0; i<ncolors; i++)
    395404    {
    396405      int bd = bgr[0] - pal[i].p[0];
     
    404413        }
    405414    }
     415  }
    406416  // Store in pmap
    407417  if (pmap && pmap->size()<0x8000)
     
    420430DjVuPalette::quantize(GPixmap &pm)
    421431{
    422   for (int j=0; j<(int)pm.rows(); j++)
     432  { // extra nesting for windows
     433    for (int j=0; j<(int)pm.rows(); j++)
    423434    {
    424435      GPixel *p = pm[j];
     
    426437        index_to_color(color_to_index(p[i]), p[i]);
    427438    }
     439  }
    428440}
    429441
     
    476488{
    477489  const int palettesize = palette.size();
    478   for (int c=0; c<palettesize; c++)
     490  { // extra nesting for windows
     491    for (int c=0; c<palettesize; c++)
    479492    {
    480493      unsigned char p[3];
     
    484497      bs.writall((const void*)p, 3);
    485498    }
     499  }
    486500}
    487501
     
    498512  // Code palette
    499513  bs.write16(palettesize);
    500   for (int c=0; c<palettesize; c++)
     514  { // extra nesting for windows
     515    for (int c=0; c<palettesize; c++)
    501516    {
    502517      unsigned char p[3];
     
    506521      bs.writall((const void*)p, 3);
    507522    }
     523  }
    508524  // Code colordata
    509525  if (datasize > 0)
     
    521537{
    522538  palette.resize(0,palettesize-1);
    523   for (int c=0; c<palettesize; c++)
     539  { // extra nesting for windows
     540    for (int c=0; c<palettesize; c++)
    524541    {
    525542      unsigned char p[3];
     
    530547      palette[c].p[3] = (p[0]*BMUL+p[1]*GMUL+p[2]*RMUL)/SMUL;
    531548    }
     549  }
    532550}
    533551
     
    551569    G_THROW( ERR_MSG("DjVuPalette.bad_palette") );
    552570  palette.resize(0,palettesize-1);
    553   for (int c=0; c<palettesize; c++)
     571  { // extra nesting for windows
     572    for (int c=0; c<palettesize; c++)
    554573    {
    555574      unsigned char p[3];
     
    560579      palette[c].p[3] = (p[0]*BMUL+p[1]*GMUL+p[2]*RMUL)/SMUL;
    561580    }
     581  }
    562582  // Code data
    563583  if (version & 0x80)
     
    569589      GP<ByteStream> gbsb=BSByteStream::create(gbs);
    570590      ByteStream &bsb=*gbsb;
    571       for (int d=0; d<datasize; d++)
     591      { // extra nesting for windows
     592        for (int d=0; d<datasize; d++)
    572593        {
    573594          short s = bsb.read16();
     
    576597          colordata[d] = s;
    577598        }
     599      }
    578600    }
    579601}
  • trunk/libdjvu/DjVuPalette.h

    r15 r17  
    5353//
    5454// $Id: DjVuPalette.h,v 1.9 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUPALETTE_H_
  • trunk/libdjvu/DjVuPort.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuPort.cpp,v 1.10 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuPort.h

    r15 r17  
    5353//
    5454// $Id: DjVuPort.h,v 1.8 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUPORT_H
  • trunk/libdjvu/DjVuText.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuText.cpp,v 1.10 2004/07/07 19:23:36 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuText.h

    r15 r17  
    5353//
    5454// $Id: DjVuText.h,v 1.10 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVUTEXT_H
  • trunk/libdjvu/DjVuToPS.cpp

    r15 r17  
    5353//
    5454// $Id: DjVuToPS.cpp,v 1.23 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/DjVuToPS.h

    r15 r17  
    5353//
    5454// $Id: DjVuToPS.h,v 1.14 2004/03/05 16:48:53 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DJVU_TO_PS_H_
  • trunk/libdjvu/GBitmap.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GBitmap.cpp,v 1.10 2004/04/17 23:56:11 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GBitmap.cpp,v 1.11 2005/12/24 12:45:01 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    7070#include <string.h>
    7171
    72 // File "$Id: GBitmap.cpp,v 1.10 2004/04/17 23:56:11 leonb Exp $"
     72// File "$Id: GBitmap.cpp,v 1.11 2005/12/24 12:45:01 leonb Exp $"
    7373// - Author: Leon Bottou, 05/1997
    7474
     
    15581558{
    15591559  GP<GBitmap> newbitmap=this;
    1560   if((count%=4))
     1560  count = count & 3;
     1561  if(count)
    15611562  {
    15621563    if( count & 0x01 )
     
    15741575    switch(count)
    15751576    {
    1576     case 1: // rotate 90 counter clockwise
     1577    case 3: // rotate 90 counter clockwise
    15771578      {
    15781579        const int lastrow = dbitmap.rows()-1;
     
    16021603      }
    16031604      break;
    1604     case 3: // rotate 270 counter clockwise
     1605    case 1: // rotate 270 counter clockwise
    16051606      {
    16061607        const int lastcolumn = dbitmap.columns()-1;
  • trunk/libdjvu/GBitmap.h

    r15 r17  
    5353//
    5454// $Id: GBitmap.h,v 1.9 2004/04/17 23:56:11 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _GBITMAP_H_
  • trunk/libdjvu/GContainer.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GContainer.cpp,v 1.12 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GContainer.cpp,v 1.13 2005/11/12 15:52:25 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    388388}
    389389
    390 #include <stdio.h>
    391390GListBase::~GListBase()
    392391{
  • trunk/libdjvu/GContainer.h

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GContainer.h,v 1.15 2004/05/13 15:16:34 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GContainer.h,v 1.17 2006/02/21 16:10:29 docbill Exp $
     55// $Name: $
    5656
    5757#ifndef _GCONTAINER_H_
     
    131131    Andrei Erofeev <eaf@geocities.com> -- bug fixes.
    132132    @version
    133     #$Id: GContainer.h,v 1.15 2004/05/13 15:16:34 leonb Exp $# */
     133    #$Id: GContainer.h,v 1.17 2006/02/21 16:10:29 docbill Exp $# */
    134134//@{
    135135
     
    394394      invocation of this conversion operator. */
    395395  operator const TYPE* () const
    396     { return ((const TYPE*)data)-minlo; }
    397   operator const TYPE* ()  // suppress warning with gcc-2.95
    398396    { return ((const TYPE*)data)-minlo; }
    399397  // -- ALTERATION
     
    750748  GPosition firstpos() const { return GPosition(head.next, (void*)this); }
    751749  GPosition lastpos() const { return GPosition(head.prev, (void*)this); }
    752   int isempty() const { return nelem==0; };
     750  bool isempty() const { return nelem==0; };
    753751  GPosition nth(unsigned int n) const;
    754752  void empty();
     
    846844  /** Tests whether a list is empty. 
    847845      Returns a non zero value if the list contains no elements. */
    848   int isempty() const
     846  bool isempty() const
    849847    { return this->nelem==0; }
    850848  /** Compares two lists. Returns a non zero value if and only if both lists
     
    11591157  /** Tests whether the associative map is empty. 
    11601158      Returns a non zero value if and only if the map contains zero entries. */
    1161   int isempty() const
     1159  bool isempty() const
    11621160    { return this->nelems==0; }
    11631161  /** Searches an entry for key #key#.  If the map contains an entry whose key
     
    13081306}
    13091307
    1310 /** Hashing function (void *). */
    1311 static inline unsigned int
    1312 hash(void * const & x)
    1313 {
    1314   return (unsigned long) x;
    1315 }
    1316 
    13171308/** Hashing function (const void *). */
    13181309static inline unsigned int
  • trunk/libdjvu/GException.cpp

    r15 r17  
    5353//
    5454// $Id: GException.cpp,v 1.14 2004/08/06 15:11:29 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/GException.h

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GException.h,v 1.10 2005/06/07 23:42:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GException.h,v 1.11 2005/11/12 15:52:25 leonb Exp $
     55// $Name: $
    5656
    5757#ifndef _GEXCEPTION_H_
    5858#define _GEXCEPTION_H_
    5959#ifdef HAVE_CONFIG_H
    60 #include "config.h"
     60# include "config.h"
    6161#endif
    6262#if NEED_GNUG_PRAGMAS
     
    117117    Andrei Erofeev <eaf@geocities.com> -- fixed message memory allocation.
    118118    @version
    119     #$Id: GException.h,v 1.10 2005/06/07 23:42:22 leonb Exp $# */
     119    #$Id: GException.h,v 1.11 2005/11/12 15:52:25 leonb Exp $# */
    120120//@{
    121121
    122122#include "DjVuGlobal.h"
     123
     124// Check if compiler supports native exceptions
     125#ifdef HAVE_CONFIG_H
     126# if HAVE_EXCEPTIONS
     127#  define CPP_SUPPORTS_EXCEPTIONS
     128# endif
     129#else
     130# if defined(_MSC_VER)
     131#  define CPP_SUPPORTS_EXCEPTIONS
     132# endif
     133# if defined(__MWERKS__)
     134#  define CPP_SUPPORTS_EXCEPTIONS
     135# endif
     136# if defined(__EXCEPTIONS)
     137#  define CPP_SUPPORTS_EXCEPTIONS
     138# endif
     139#endif
     140// Decide which exception model to use
     141#ifndef CPP_SUPPORTS_EXCEPTIONS
     142# ifndef USE_EXCEPTION_EMULATION
     143#  define USE_EXCEPTION_EMULATION
     144# endif
     145#endif
     146
     147#ifdef USE_EXCEPTION_EMULATION
     148# include <setjmp.h>
     149#endif
    123150
    124151#ifdef HAVE_NAMESPACES
     
    126153# ifdef NOT_DEFINED // Just to fool emacs c++ mode
    127154}
    128 #endif
    129 #endif
    130 
    131 
     155# endif
     156#endif
    132157
    133158/** Exception class. 
     
    227252#undef G_THROW_OTHER
    228253
    229 // Check if compiler supports native exceptions
    230 #if defined(_MSC_VER)
    231 #define CPP_SUPPORTS_EXCEPTIONS
    232 #endif
    233 #if defined(__MWERKS__)
    234 #define CPP_SUPPORTS_EXCEPTIONS
    235 #endif
    236 #if defined(__EXCEPTIONS)
    237 #define CPP_SUPPORTS_EXCEPTIONS
    238 #endif
    239 // Decide which exception model to use
    240 #ifndef CPP_SUPPORTS_EXCEPTIONS
    241 #ifndef USE_EXCEPTION_EMULATION
    242 #define USE_EXCEPTION_EMULATION
    243 #endif
    244 #endif
    245 
    246 
    247254#ifndef USE_EXCEPTION_EMULATION
    248255
     
    278285// Compiler does not support ANSI C++ exceptions.
    279286// Emulate with setjmp/longjmp.
    280 
    281 #include <setjmp.h>
    282287
    283288class GExceptionHandler {
  • trunk/libdjvu/GIFFManager.cpp

    r15 r17  
    5353//
    5454// $Id: GIFFManager.cpp,v 1.8 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/GIFFManager.h

    r15 r17  
    5353//
    5454// $Id: GIFFManager.h,v 1.8 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _GIFFMANAGER_H
  • trunk/libdjvu/GMapAreas.cpp

    r15 r17  
    5353//
    5454// $Id: GMapAreas.cpp,v 1.9 2004/05/05 15:12:42 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/GMapAreas.h

    r15 r17  
    5353//
    5454// $Id: GMapAreas.h,v 1.8 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _GMAPAREAS_H
  • trunk/libdjvu/GOS.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GOS.cpp,v 1.12 2005/04/27 16:34:13 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GOS.cpp,v 1.13 2005/12/23 15:14:16 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    131131#if defined(AUTOCONF) && !defined(HAVE_STRERROR)
    132132# define NEED_STRERROR
    133 #elif defined(sun) && !defined(__svr4__)
     133#elif defined(sun) && !defined(__svr4__) && !defined(__SVR4)
    134134# define NEED_STRERROR
    135135#elif defined(REIMPLEMENT_STRERROR)
  • trunk/libdjvu/GOS.h

    r15 r17  
    5353//
    5454// $Id: GOS.h,v 1.8 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _GOS_H_
  • trunk/libdjvu/GPixmap.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GPixmap.cpp,v 1.12 2004/08/06 15:11:29 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GPixmap.cpp,v 1.13 2005/12/24 12:45:01 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    16051605{
    16061606  GP<GPixmap> newpixmap(this);
    1607   if((count %= 4))
     1607  count = count & 3;
     1608  if(count)
    16081609  {
    16091610    if( count&0x01)
     
    16171618    switch(count)
    16181619    {
    1619     case 1: //// rotate 90 counter clockwise
     1620    case 3: //// rotate 90 counter clockwise
    16201621        {
    16211622            int lastrow = dpixmap.rows()-1;
     
    16471648        }
    16481649        break;
    1649     case 3: //// rotate 270 counter clockwise
     1650    case 1: //// rotate 270 counter clockwise
    16501651        {
    16511652            int lastcolumn = dpixmap.columns()-1;
  • trunk/libdjvu/GPixmap.h

    r15 r17  
    5353//
    5454// $Id: GPixmap.h,v 1.8 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _GPIXMAP_H_
  • trunk/libdjvu/GRect.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GRect.cpp,v 1.10 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GRect.cpp,v 1.11 2006/02/21 16:10:29 docbill Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    108108operator==(const GRect & r1, const GRect & r2)
    109109{
    110   int isempty1 = r1.isempty();
    111   int isempty2 = r2.isempty();
     110  bool isempty1 = r1.isempty();
     111  bool isempty2 = r2.isempty();
    112112  if (isempty1 || isempty2)
    113113    if (isempty1 && isempty2)
  • trunk/libdjvu/GRect.h

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GRect.h,v 1.9 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GRect.h,v 1.11 2006/02/21 16:10:29 docbill Exp $
     55// $Name: $
    5656
    5757#ifndef _GRECT_H_
     
    7676    L\'eon Bottou <leonb@research.att.com> -- initial implementation.
    7777    @version
    78     #$Id: GRect.h,v 1.9 2003/11/07 22:08:21 leonb Exp $# */
     78    #$Id: GRect.h,v 1.11 2006/02/21 16:10:29 docbill Exp $# */
    7979//@{
    8080
     
    8888#endif
    8989
     90
     91/* Flag to indicate that this djvulibre version
     92   gets rid of all the crap about orientation bits.
     93   All rotation code has been fixed and consistently
     94   implements counter-clockwise rotations. */
     95
     96#define GRECT_WITHOUT_ORIENTATION_BITS 1
    9097
    9198
     
    133140{
    134141public:
    135   /** #OrientationBits# defines 3 mutually exclusive
    136      bits to indicate the image orientation.
    137 
    138      There are four possible rotation values for an image
    139      which are 0 degrees, 90 degrees, 180 degrees, and 270 degrees.
    140      In addition the image can be mirrored backwards in any of these
    141      orientations, giving a possible of 8 orientations.  To sanely deal
    142      with these orientations, we have defined 3 mutually exclusive
    143      bits.  These are BOTTOM_UP, MIRROR, and ROTATE90_CW.
    144   */
    145   enum OrientationBits
    146   {
    147     BOTTOM_UP=0x1,  /* Upside down */
    148     MIRROR=0x2,     /* Written backwards. (right to left) */
    149     ROTATE90_CW=0x4 /* rotated 90 degrees */
    150   };
    151 
    152   /**  #Orientations# defines all 8 possible orientations, using
    153    the three \Ref{OrientationBits}.
    154    \begin{itemize}
    155    \item {\em TDLRNR} for Top Down, Left to Right, No Rotation.
    156    \item {\em BULRNR} for Bottom Up, Left to Right, No Rotation.
    157    \item {\em TDRLNR} for Top Down, Right to Left, No Rotation.
    158    \item {\em BURLNR} for Bottom Up, Right to Left, No Rotation.
    159    \item {\em TDLRCW} for Top Down, Left to Right, 90 degree CW rotation.
    160    \item {\em BULRCW} for Bottom Up, Left to Right, 90 degree CW rotation.
    161    \item {\em TDRLCW} for Top Down, Right to Left, 90 degree CW rotation.
    162    \item {\em BURLCW} for Bottom Up, Right to Left, 90 degree CW rotation.
    163    \end{itemize}
    164   */
    165   enum Orientations
    166   {
    167     TDLRNR=0,                                     /* normal orientation */
    168     BULRNR=BOTTOM_UP,                               /* upside down */
    169     TDRLNR=MIRROR,                    /* backwards (right to left) */
    170     BURLNR=MIRROR|BOTTOM_UP,                    /* rotate 180 */
    171     TDLRCW=ROTATE90_CW,                              /* rotated 90 */
    172     BULRCW=ROTATE90_CW|BOTTOM_UP, /* backwards and rotate 180 */
    173     TDRLCW=ROTATE90_CW|MIRROR,     /* backwards and rotate 90 */
    174     BURLCW=ROTATE90_CW|MIRROR|BOTTOM_UP    /* rotate 270 */
    175   };
    176 
    177   static Orientations
    178   rotate(const int angle,Orientations orientation)
    179   {
    180     for(int a=(((angle)%360)+405)%360;a>90;a-=90)
    181       orientation=(Orientations)((int)orientation^(int)(orientation&ROTATE90_CW)?BURLCW:TDLRCW);
    182     return orientation;
    183   }
    184 
    185   static int
    186   findangle(const Orientations orientation)
    187   {
    188     int a=270;
    189     while(a&&(rotate(a,BURLNR)!=orientation)&&(rotate(a,TDRLNR)!=orientation))
    190       a-=90;
    191     return a;
    192   }
    193 
    194142  /** Constructs an empty rectangle */
    195143  GRect();
     
    205153  int  area() const;
    206154  /** Returns true if the rectangle is empty. */
    207   int  isempty() const;
     155  bool  isempty() const;
    208156  /** Returns true if the rectangle contains pixel (#x#,#y#).  A rectangle
    209157      contains all pixels with horizontal pixel coordinates in range #xmin#
     
    316264      overwritten with the new rectangle coordinates. */
    317265  void unmap(GRect &rect);
    318 private:
     266public:
    319267  // GRatio
    320268  struct GRatio {
     
    324272    int q;
    325273  };
     274private:
    326275  // Data
    327276  GRect rectFrom;
     
    367316}
    368317
    369 inline int
     318inline bool
    370319GRect::isempty() const
    371320{
  • trunk/libdjvu/GScaler.h

    r15 r17  
    5353//
    5454// $Id: GScaler.h,v 1.9 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _GSCALER_H_
  • trunk/libdjvu/GSmartPointer.cpp

    r15 r17  
    5353//
    5454// $Id: GSmartPointer.cpp,v 1.11 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/GSmartPointer.h

    r15 r17  
    5353//
    5454// $Id: GSmartPointer.h,v 1.11 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _GSMARTPOINTER_H_
  • trunk/libdjvu/GString.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GString.cpp,v 1.22 2005/04/27 16:34:13 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GString.cpp,v 1.23 2005/12/23 15:14:16 leonb Exp $
     55// $Name: $
    5656
    5757// From: Leon Bottou, 1/31/2002
     
    669669/*MBCS*/
    670670GNativeString
    671 GBaseString::getUTF82Native( const EscapeMode escape ) const
     671GBaseString::getUTF82Native( EscapeMode escape ) const
    672672{ //MBCS cvt
    673673  GNativeString retval;
  • trunk/libdjvu/GString.h

    r15 r17  
    5353//
    5454// $Id: GString.h,v 1.20 2005/07/22 15:28:07 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _GSTRING_H_
  • trunk/libdjvu/GThreads.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GThreads.cpp,v 1.15 2004/04/21 14:54:43 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GThreads.cpp,v 1.17 2006/02/21 17:27:34 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/GThreads.h

    r15 r17  
    5353//
    5454// $Id: GThreads.h,v 1.10 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _GTHREADS_H_
  • trunk/libdjvu/GURL.cpp

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GURL.cpp,v 1.19 2005/04/27 16:34:13 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GURL.cpp,v 1.21 2005/12/24 12:45:01 leonb Exp $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
     
    393393                        EMPTY_LOOP;
    394394           arg=ptr;
    395            url=url.substr(0,(size_t)ptr-(size_t)url_ptr);
     395           url=url.substr(0,(size_t)(ptr-url_ptr));
    396396         }
    397397
     
    828828
    829829      // And clear everything past the '?' sign in the URL
    830    for(const char * ptr=url;*ptr;ptr++)
     830   const char * ptrurl = url;
     831   for(const char *ptr = ptrurl; *ptr; ptr++)
    831832      if (*ptr=='?')
    832833      {
    833          url.setat(ptr-url, 0);
     834         url.setat(ptr-ptrurl, 0);
    834835         break;
    835836      }
  • trunk/libdjvu/GURL.h

    r15 r17  
    5252//C- +------------------------------------------------------------------
    5353//
    54 // $Id: GURL.h,v 1.9 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     54// $Id: GURL.h,v 1.10 2006/01/31 15:28:30 leonb Exp $
     55// $Name: $
    5656
    5757#ifndef _GURL_H_
     
    9090// and file status code (only for local file: urls).
    9191
    92     @version #$Id: GURL.h,v 1.9 2003/11/07 22:08:21 leonb Exp $#
     92    @version #$Id: GURL.h,v 1.10 2006/01/31 15:28:30 leonb Exp $#
    9393*/
    9494
     
    279279
    280280      /// Returns TRUE if #gurl1# and #gurl2# are the same
    281    bool GURL::operator==(const GURL & gurl2) const;
     281   bool operator==(const GURL & gurl2) const;
    282282
    283283      /// Returns TRUE if #gurl1# and #gurl2# are different
    284    bool GURL::operator!=(const GURL & gurl2) const;
     284   bool operator!=(const GURL & gurl2) const;
    285285
    286286      /// Assignment operator
  • trunk/libdjvu/GUnicode.cpp

    r15 r17  
    5353//
    5454// $Id: GUnicode.cpp,v 1.11 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/IFFByteStream.cpp

    r15 r17  
    5353//
    5454// $Id: IFFByteStream.cpp,v 1.10 2004/08/06 15:11:29 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/IFFByteStream.h

    r15 r17  
    5353//
    5454// $Id: IFFByteStream.h,v 1.10 2003/11/07 22:08:21 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _IFFBYTESTREAM_H_
  • trunk/libdjvu/IW44EncodeCodec.cpp

    r15 r17  
    5353//
    5454// $Id: IW44EncodeCodec.cpp,v 1.11 2004/08/06 15:11:29 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/IW44Image.cpp

    r15 r17  
    5353//
    5454// $Id: IW44Image.cpp,v 1.11 2004/08/06 15:11:29 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/IW44Image.h

    r15 r17  
    5353//
    5454// $Id: IW44Image.h,v 1.11 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef IW44IMAGE_H_
  • trunk/libdjvu/JB2EncodeCodec.cpp

    r15 r17  
    5353//
    5454// $Id: JB2EncodeCodec.cpp,v 1.9 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/JB2Image.cpp

    r15 r17  
    5353//
    5454// $Id: JB2Image.cpp,v 1.10 2004/04/17 23:56:11 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/JB2Image.h

    r15 r17  
    5353//
    5454// $Id: JB2Image.h,v 1.9 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _JB2IMAGE_H
  • trunk/libdjvu/JPEGDecoder.cpp

    r15 r17  
    5353//
    5454// $Id: JPEGDecoder.cpp,v 1.8 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/JPEGDecoder.h

    r15 r17  
    5353//
    5454// $Id: JPEGDecoder.h,v 1.8 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _JPEGDECODER_H_
  • trunk/libdjvu/MMRDecoder.cpp

    r15 r17  
    5353//
    5454// $Id: MMRDecoder.cpp,v 1.8 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/MMRDecoder.h

    r15 r17  
    5353//
    5454// $Id: MMRDecoder.h,v 1.9 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _MMRDECODER_H_
  • trunk/libdjvu/MMX.cpp

    r15 r17  
    5353//
    5454// $Id: MMX.cpp,v 1.10 2004/05/13 16:50:10 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/MMX.h

    r15 r17  
    5353//
    5454// $Id: MMX.h,v 1.9 2003/12/01 22:57:40 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _MMX_H_
  • trunk/libdjvu/Template.h

    r15 r17  
    5353//
    5454// $Id: Template.h,v 1.8 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757//T// This is a template for the header files in the
  • trunk/libdjvu/UnicodeByteStream.cpp

    r15 r17  
    5353//
    5454// $Id: UnicodeByteStream.cpp,v 1.8 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/UnicodeByteStream.h

    r15 r17  
    5353//
    5454// $Id: UnicodeByteStream.h,v 1.9 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _UNICODEBYTESTREAM_H_
  • trunk/libdjvu/XMLParser.cpp

    r15 r17  
    5353//
    5454// $Id: XMLParser.cpp,v 1.10 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/XMLParser.h

    r15 r17  
    5353//
    5454// $Id: XMLParser.h,v 1.9 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _LT_XMLPARSER__
  • trunk/libdjvu/XMLTags.cpp

    r15 r17  
    5353//
    5454// $Id: XMLTags.cpp,v 1.12 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/XMLTags.h

    r15 r17  
    5353//
    5454// $Id: XMLTags.h,v 1.9 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _LT_XMLTAGS__
  • trunk/libdjvu/ZPCodec.cpp

    r15 r17  
    5353//
    5454// $Id: ZPCodec.cpp,v 1.10 2004/08/06 14:49:34 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/ZPCodec.h

    r15 r17  
    5353//
    5454// $Id: ZPCodec.h,v 1.9 2003/11/07 22:08:22 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _ZPCODEC_H
  • trunk/libdjvu/ddjvuapi.cpp

    r15 r17  
    5353//C- */
    5454
    55 /* $Id: ddjvuapi.cpp,v 1.41 2005/09/12 21:31:06 leonb Exp $ */
     55/* $Id: ddjvuapi.cpp,v 1.55 2006/02/21 16:10:29 docbill Exp $ */
    5656
    5757#ifdef HAVE_CONFIG_H
     
    111111#include "DjVuAnno.h"
    112112#include "DjVuToPS.h"
     113#include "DjVmDir.h"
     114#include "DjVmDoc.h"
    113115
    114116
     
    155157  GP<DjVuFileCache> cache;
    156158  GPList<ddjvu_message_p> mlist;
     159  GP<ddjvu_message_p> mpeeked;
    157160  int uniqueid;
    158161  ddjvu_message_callback_t callbackfun;
     
    206209  bool pageinfoflag;            // was the first m_pageinfo sent?
    207210  bool pagedoneflag;            // was the final m_pageinfo sent?
    208   bool redisplayflag;           // did we receive a redisplay notification?
    209211  // virtual job functions:
    210212  virtual ddjvu_status_t status();
     
    337339    {
    338340      setlocale(LC_ALL,"");
    339       DjVuMessage::use_language();
    340341      if (programname)
    341342        djvu_programname(programname);
     343      DjVuMessage::use_language();
     344      DjVuMessageLite::create();
    342345      ctx = new ddjvu_context_s;
    343346      ref(ctx);
     
    347350      ctx->cache = DjVuFileCache::create();
    348351    }
    349   G_CATCH(ex)
     352  G_CATCH_ALL
    350353    {
    351354      if (ctx)
     
    365368        unref(ctx);
    366369    }
    367   G_CATCH(ex)
     370  G_CATCH_ALL
    368371    {
    369372    }
     
    383386  ddjvu_context_t *ctx = head.context;
    384387  if (! msg) msg = new ddjvu_message_p;
    385   msg->p.m_any = head;
    386   {
    387     GMonitorLock lock(&ctx->monitor);
    388     ctx->mlist.append(msg);
    389     ctx->monitor.broadcast();
    390   }
     388  msg->p.m_any = head;
     389  GMonitorLock lock(&ctx->monitor);
    391390  if (ctx->callbackfun)
    392391    (*ctx->callbackfun)(ctx, ctx->callbackarg);
     392  ctx->mlist.append(msg);
     393  ctx->monitor.broadcast();
    393394}
    394395
     
    401402      msg_push(head, msg);
    402403    }
    403   G_CATCH(ex)
     404  G_CATCH_ALL
    404405    {
    405406    }
     
    424425      p->p.m_error.message = (const char*)(p->tmp1);
    425426    }
    426   G_CATCH(ex)
     427  G_CATCH_ALL
    427428    {
    428429    }
     
    451452      p->p.m_error.lineno = ex.get_line();
    452453    }
    453   G_CATCH(exc)
     454  G_CATCH_ALL
    454455    {
    455456    }
     
    472473
    473474#ifdef __GNUG__
    474 # define ERROR(x, m) \
     475# define ERROR1(x, m) \
    475476    msg_push_nothrow(xhead(DDJVU_ERROR,x),\
    476477                     msg_prep_error(m,__func__,__FILE__,__LINE__))
    477478#else
    478 # define ERROR(x, m) \
     479# define ERROR1(x, m) \
    479480    msg_push_nothrow(xhead(DDJVU_ERROR,x),\
    480481                     msg_prep_error(m,0,__FILE__,__LINE__))
     
    497498  G_CATCH(ex)
    498499    {
    499       ERROR(ctx, ex);
     500      ERROR1(ctx, ex);
    500501    }
    501502  G_ENDCATCH;
     
    513514  G_CATCH(ex)
    514515    {
    515       ERROR(ctx, ex);
     516      ERROR1(ctx, ex);
    516517    }
    517518  G_ENDCATCH;
     
    526527      GMonitorLock lock(&ctx->monitor);
    527528      if (ctx->cache)
    528         return ctx->cache->clear();
     529      {
     530        ctx->cache->clear();
     531        return;
     532      }
    529533    }
    530534  G_CATCH(ex)
    531535    {
    532       ERROR(ctx, ex);
     536      ERROR1(ctx, ex);
    533537    }
    534538  G_ENDCATCH;
     
    549553      while (p) {
    550554        GPosition s = p; ++p;
    551         if (ctx->mlist[s]->p.m_any.job == this)
     555        if (ctx->mlist[s]->p.m_any.job == this ||
     556            ctx->mlist[s]->p.m_any.document == this ||
     557            ctx->mlist[s]->p.m_any.page == this )
    552558          ctx->mlist.del(s);
    553559      }
    554560    }
    555   G_CATCH()
     561  G_CATCH_ALL
    556562    {
    557563    }
     
    592598      unref(job);
    593599    }
    594   G_CATCH(ex)
     600  G_CATCH_ALL
    595601    {
    596602    }
     
    609615  G_CATCH(ex)
    610616    {
    611       ERROR(job, ex);
     617      ERROR1(job, ex);
    612618    }
    613619  G_ENDCATCH;
     
    625631  G_CATCH(ex)
    626632    {
    627       ERROR(job, ex);
     633      ERROR1(job, ex);
    628634    }
    629635  G_ENDCATCH;
     
    656662    {
    657663      GMonitorLock lock(&ctx->monitor);
     664      if (ctx->mpeeked)
     665        return &ctx->mpeeked->p;       
    658666      GPosition p = ctx->mlist;
    659       if (p)
    660         return &ctx->mlist[p]->p;
    661     }
    662   G_CATCH(ex)
     667      if (! p)
     668        return 0;
     669      ctx->mpeeked = ctx->mlist[p];
     670      ctx->mlist.del(p);
     671      return &ctx->mpeeked->p;       
     672    }
     673  G_CATCH_ALL
    663674    {
    664675    }
     
    673684    {
    674685      GMonitorLock lock(&ctx->monitor);
     686      if (ctx->mpeeked)
     687        return &ctx->mpeeked->p;       
    675688      while (! ctx->mlist.size())
    676       {
    677689        ctx->monitor.wait();
    678       }
    679690      GPosition p = ctx->mlist;
    680       if (p)
    681         return &ctx->mlist[p]->p;
    682     }
    683   G_CATCH(ex)
     691      if (! p)
     692        return 0;
     693      ctx->mpeeked = ctx->mlist[p];
     694      ctx->mlist.del(p);
     695      return &ctx->mpeeked->p;       
     696    }
     697  G_CATCH_ALL
    684698    {
    685699    }
     
    694708    {
    695709      GMonitorLock lock(&ctx->monitor);
    696       GPosition p = ctx->mlist;
    697       if (p)
    698         ctx->mlist.del(p);
    699     }
    700   G_CATCH(ex)
     710      ctx->mpeeked = 0;
     711    }
     712  G_CATCH_ALL
    701713    {
    702714    }
     
    876888        unref(d);
    877889      d = 0;
    878       ERROR(ctx, ex);
     890      ERROR1(ctx, ex);
    879891    }
    880892  G_ENDCATCH;
     
    912924        unref(d);
    913925      d = 0;
    914       ERROR(ctx, ex);
     926      ERROR1(ctx, ex);
    915927    }
    916928  G_ENDCATCH;
     
    950962  G_CATCH(ex)
    951963    {
    952       ERROR(doc,ex);
     964      ERROR1(doc,ex);
    953965    }
    954966  G_ENDCATCH;
     
    971983        G_THROW("Unknown stream ID");
    972984      if (stop)
    973         pool->stop();
    974       else
    975         pool->set_eof();
     985        pool->stop(true);
     986      pool->set_eof();
    976987    }
    977988  G_CATCH(ex)
    978989    {
    979       ERROR(doc, ex);
     990      ERROR1(doc, ex);
    980991    }
    981992  G_ENDCATCH;
     
    10141025  G_CATCH(ex)
    10151026    {
    1016       ERROR(document,ex);
     1027      ERROR1(document,ex);
    10171028    }
    10181029  G_ENDCATCH;
     
    10311042  G_CATCH(ex)
    10321043    {
    1033       ERROR(document,ex);
     1044      ERROR1(document,ex);
    10341045    }
    10351046  G_ENDCATCH;
    10361047  return 1;
    10371048}
     1049
     1050
     1051int
     1052ddjvu_document_get_filenum(ddjvu_document_t *document)
     1053{
     1054  G_TRY
     1055    {
     1056      DjVuDocument *doc = document->doc;
     1057      if (! (doc && doc->is_init_ok()))
     1058        return 0;
     1059      GP<DjVmDir> dir = doc->get_djvm_dir();
     1060      if (dir)
     1061        return dir->get_files_num();
     1062    }
     1063  G_CATCH(ex)
     1064    {
     1065      ERROR1(document,ex);
     1066    }
     1067  G_ENDCATCH;
     1068  return 1;
     1069}
     1070
     1071ddjvu_status_t
     1072ddjvu_document_get_fileinfo(ddjvu_document_t *document, int fileno,
     1073                            ddjvu_fileinfo_t *info)
     1074{
     1075  G_TRY
     1076    {
     1077      memset(info, 0, sizeof(ddjvu_fileinfo_t));
     1078      DjVuDocument *doc = document->doc;
     1079      if (! doc)
     1080        return DDJVU_JOB_NOTSTARTED;
     1081      if (! doc->is_init_ok())
     1082        return document->status();
     1083      GP<DjVmDir> dir = doc->get_djvm_dir();
     1084      GP<DjVmDir::File> file = dir->pos_to_file(fileno, &info->pageno);
     1085      if (! file)
     1086        G_THROW("Illegal file number");
     1087      if (file->is_page())
     1088        info->type = 'P';
     1089      else if (file->is_thumbnails())
     1090        info->type = 'T';
     1091      else if (file->is_shared_anno())
     1092        info->type = 'S';
     1093      else
     1094        info->type = 'I';
     1095      info->size = file->size;
     1096      info->id = file->get_load_name();
     1097      info->name = file->get_save_name();
     1098      info->title = file->get_title();
     1099      return DDJVU_JOB_OK;
     1100    }
     1101  G_CATCH(ex)
     1102    {
     1103      ERROR1(document,ex);
     1104    }
     1105  G_ENDCATCH;
     1106  return DDJVU_JOB_FAILED;
     1107}
     1108
     1109int
     1110ddjvu_document_search_pageno(ddjvu_document_t *document, const char *name)
     1111{
     1112  G_TRY
     1113    {
     1114      DjVuDocument *doc = document->doc;
     1115      if (! (doc && doc->is_init_ok()))
     1116        return -1;
     1117      GP<DjVmDir> dir = doc->get_djvm_dir();
     1118      if (! dir)
     1119        return 0;
     1120      GP<DjVmDir::File> file;
     1121      if (! (file = dir->id_to_file(GUTF8String(name))))
     1122        if (! (file = dir->name_to_file(GUTF8String(name))))
     1123          if (! (file = dir->title_to_file(GUTF8String(name))))
     1124            {
     1125              char *edata=0;
     1126              long int p = strtol(name, &edata, 10);
     1127              if (edata!=name && !*edata && p>=0)
     1128                file = dir->page_to_file(p);
     1129            }
     1130      if (file)
     1131        {
     1132          int pageno = -1;
     1133          int fileno = dir->get_file_pos(file);
     1134          if (dir->pos_to_file(fileno, &pageno))
     1135            return pageno;
     1136        }
     1137    }
     1138  G_CATCH(ex)
     1139    {
     1140      ERROR1(document,ex);
     1141    }
     1142  G_ENDCATCH;
     1143  return -1;
     1144}
     1145
     1146
     1147int
     1148ddjvu_document_check_pagedata(ddjvu_document_t *document, int pageno)
     1149{
     1150  G_TRY
     1151    {
     1152      document->pageinfoflag = true;
     1153      DjVuDocument *doc = document->doc;
     1154      if (doc && doc->is_init_ok())
     1155        {
     1156          GP<DjVuFile> file;
     1157          if (doc->get_doc_type()==DjVuDocument::INDIRECT)
     1158            file = doc->get_djvu_file(pageno, true);
     1159          else
     1160            file = doc->get_djvu_file(pageno, false);           
     1161          if (file && file->is_all_data_present())
     1162            return 1;
     1163        }
     1164    }
     1165  G_CATCH(ex)
     1166    {
     1167      ERROR1(document,ex);
     1168    }
     1169  G_ENDCATCH;
     1170  return 0;
     1171}
     1172
    10381173
    10391174ddjvu_status_t
     
    10641199                      GP<DjVuInfo> info=DjVuInfo::create();
    10651200                      info->decode(*gbs);
    1066                       int rot = ((360-GRect::findangle(info->orientation))/90)%4;
     1201                      int rot = info->orientation;
    10671202                      if (pageinfo)
    10681203                        {
    1069                           pageinfo->width = (rot&1) ? info->height : info->width;
    1070                           pageinfo->height = (rot&1) ? info->width : info->height;
     1204                          pageinfo->width =
     1205                            (rot&1) ? info->height : info->width;
     1206                          pageinfo->height =
     1207                            (rot&1) ? info->width : info->height;
    10711208                          pageinfo->dpi = info->dpi;
    10721209                        }
     
    10761213              else if (chkid == "FORM:BM44" || chkid == "FORM:PM44")
    10771214                {
    1078                   while (iff->get_chunk(chkid) && chkid!="BM44" && chkid!="PM44")
     1215                  while (iff->get_chunk(chkid) &&
     1216                         chkid!="BM44" && chkid!="PM44")
    10791217                    iff->close_chunk();
    10801218                  if (chkid=="BM44" || chkid=="PM44")
     
    10831221                      if (gbs->read8() == 0)
    10841222                        {
     1223                          gbs->read8();
    10851224                          gbs->read8();
    10861225                          gbs->read8();
     
    11041243  G_CATCH(ex)
    11051244    {
    1106       ERROR(document, ex);
     1245      ERROR1(document, ex);
    11071246    }
    11081247  G_ENDCATCH;
     
    11311270      p->pageinfoflag = false;
    11321271      p->pagedoneflag = false;
    1133       p->redisplayflag = false;
    1134       if (job)
    1135         p->job = job;
    1136       else
    1137         p->job = job = p;
     1272      p->job = job = ((job) ? job : p);
    11381273      if (pageid)
    11391274        p->img = doc->get_page(GNativeString(pageid), false, job);
     
    11461281        unref(p);
    11471282      p = 0;
    1148       ERROR(document, ex);
     1283      ERROR1(document, ex);
    11491284    }
    11501285  G_ENDCATCH;
     
    12441379{
    12451380  GMonitorLock lock(&monitor);
    1246   if (! img || pageinfoflag) return;
    1247   msg_push(xhead(DDJVU_PAGEINFO, this));
    1248   pageinfoflag = true;
    1249   msg_push(xhead(DDJVU_RELAYOUT, this));
    1250   if ( redisplayflag )
    1251     notify_redisplay(img);
     1381  if (img && !pageinfoflag)
     1382    {
     1383      msg_push(xhead(DDJVU_PAGEINFO, this));
     1384      msg_push(xhead(DDJVU_RELAYOUT, this));
     1385      pageinfoflag = true;
     1386    }
    12521387}
    12531388
     
    12561391{
    12571392  GMonitorLock lock(&monitor);
    1258   redisplayflag = true;
     1393  if (img && !pageinfoflag)
     1394    {
     1395      msg_push(xhead(DDJVU_PAGEINFO, this));
     1396      msg_push(xhead(DDJVU_RELAYOUT, this));
     1397      pageinfoflag = true;
     1398    }
    12591399  if (img && pageinfoflag)
    12601400    msg_push(xhead(DDJVU_REDISPLAY, this));
     
    12861426  G_CATCH(ex)
    12871427    {
    1288       ERROR(page, ex);
     1428      ERROR1(page, ex);
    12891429    }
    12901430  G_ENDCATCH;
     
    13021442  G_CATCH(ex)
    13031443    {
    1304       ERROR(page, ex);
     1444      ERROR1(page, ex);
    13051445    }
    13061446  G_ENDCATCH;
     
    13181458  G_CATCH(ex)
    13191459    {
    1320       ERROR(page, ex);
     1460      ERROR1(page, ex);
    13211461    }
    13221462  G_ENDCATCH;
     
    13341474  G_CATCH(ex)
    13351475    {
    1336       ERROR(page, ex);
     1476      ERROR1(page, ex);
    13371477    }
    13381478  G_ENDCATCH;
     
    13501490  G_CATCH(ex)
    13511491    {
    1352       ERROR(page, ex);
    1353     }
    1354   G_ENDCATCH;
     1492      ERROR1(page, ex);
     1493    }
     1494  G_ENDCATCH;
     1495  return DJVUVERSION;
     1496}
     1497
     1498int
     1499ddjvu_code_get_version(void)
     1500{
    13551501  return DJVUVERSION;
    13561502}
     
    13721518  G_CATCH(ex)
    13731519    {
    1374       ERROR(page, ex);
     1520      ERROR1(page, ex);
    13751521    }
    13761522  G_ENDCATCH;
     
    13911537  G_CATCH(ex)
    13921538    {
    1393       ERROR(page, ex);
     1539      ERROR1(page, ex);
    13941540    }
    13951541  G_ENDCATCH;
     
    14101556  G_CATCH(ex)
    14111557    {
    1412       ERROR(page, ex);
     1558      ERROR1(page, ex);
    14131559    }
    14141560  G_ENDCATCH;
     
    14191565// ----------------------------------------
    14201566// Rotations
    1421 
    1422 ddjvu_page_rotation_t
    1423 ddjvu_page_get_rotation(ddjvu_page_t *page)
    1424 {
    1425   ddjvu_page_rotation_t rot = DDJVU_ROTATE_0;
    1426   G_TRY
    1427     {
    1428       if (page && page->img)
    1429         rot = (ddjvu_page_rotation_t)page->img->get_rotate();
    1430     }
    1431   G_CATCH(ex)
    1432     {
    1433       ERROR(page, ex);
    1434     }
    1435   G_ENDCATCH;
    1436   return rot;
    1437 }
    14381567
    14391568void
     
    14491578        case DDJVU_ROTATE_180:
    14501579        case DDJVU_ROTATE_270:
    1451           if (page && page->img && page->pageinfoflag)
    1452             {
    1453               int old = page->img->get_rotate();
    1454               if (old != (int)rot)
    1455                 {
    1456                   page->img->set_rotate((int)rot);
    1457                   msg_push(xhead(DDJVU_RELAYOUT, page));
    1458                   if (page->redisplayflag)
    1459                     msg_push(xhead(DDJVU_REDISPLAY, page));
    1460                 }
    1461             }
     1580          if (page && page->img && page->img->get_info())
     1581            page->img->set_rotate((int)rot);
    14621582          break;
    14631583        default:
     
    14681588  G_CATCH(ex)
    14691589    {
    1470       ERROR(page, ex);
    1471     }
    1472   G_ENDCATCH;
     1590      ERROR1(page, ex);
     1591    }
     1592  G_ENDCATCH;
     1593}
     1594
     1595ddjvu_page_rotation_t
     1596ddjvu_page_get_rotation(ddjvu_page_t *page)
     1597{
     1598  ddjvu_page_rotation_t rot = DDJVU_ROTATE_0;
     1599  G_TRY
     1600    {
     1601      if (page && page->img)
     1602        rot = (ddjvu_page_rotation_t)(page->img->get_rotate() & 3);
     1603    }
     1604  G_CATCH(ex)
     1605    {
     1606      ERROR1(page, ex);
     1607    }
     1608  G_ENDCATCH;
     1609  return rot;
     1610}
     1611
     1612ddjvu_page_rotation_t
     1613ddjvu_page_get_initial_rotation(ddjvu_page_t *page)
     1614{
     1615  ddjvu_page_rotation_t rot = DDJVU_ROTATE_0;
     1616  G_TRY
     1617    {
     1618      GP<DjVuInfo> info;
     1619      if (page && page->img)
     1620        info = page->img->get_info();
     1621      if (info)
     1622        rot = (ddjvu_page_rotation_t)(info->orientation & 3);
     1623    }
     1624  G_CATCH(ex)
     1625    {
     1626      ERROR1(page, ex);
     1627    }
     1628  G_ENDCATCH;
     1629  return rot;
     1630}
     1631
     1632
     1633// ----------------------------------------
     1634// Rectangles
     1635
     1636static void
     1637rect2grect(const ddjvu_rect_t *r, GRect &g)
     1638{
     1639  g.xmin = r->x;
     1640  g.ymin = r->y;
     1641  g.xmax = r->x + r->w;
     1642  g.ymax = r->y + r->h;
     1643}
     1644
     1645static void
     1646grect2rect(const GRect &g, ddjvu_rect_t *r)
     1647{
     1648  if (g.isempty())
     1649    {
     1650      r->x = r->y = 0;
     1651      r->w = r->h = 0;
     1652    }
     1653  else
     1654    {
     1655      r->x = g.xmin;
     1656      r->y = g.ymin;
     1657      r->w = g.width();
     1658      r->h = g.height();
     1659    }
     1660}
     1661
     1662ddjvu_rectmapper_t *
     1663ddjvu_rectmapper_create(ddjvu_rect_t *input, ddjvu_rect_t *output)
     1664{
     1665  GRect ginput, goutput;
     1666  rect2grect(input, ginput);
     1667  rect2grect(output, goutput);
     1668  GRectMapper *mapper = new GRectMapper;
     1669  if (!ginput.isempty())
     1670    mapper->set_input(ginput);
     1671  if (!goutput.isempty())
     1672    mapper->set_output(goutput);
     1673  return (ddjvu_rectmapper_t*)mapper;
     1674}
     1675
     1676void
     1677ddjvu_rectmapper_modify(ddjvu_rectmapper_t *mapper,
     1678                        int rotation, int mirrorx, int mirrory)
     1679{
     1680  GRectMapper *gmapper = (GRectMapper*)mapper;
     1681  if (! gmapper) return;
     1682  gmapper->rotate(rotation);
     1683  if (mirrorx & 1)
     1684    gmapper->mirrorx();
     1685  if (mirrory & 1)
     1686    gmapper->mirrory();
     1687}
     1688
     1689void
     1690ddjvu_rectmapper_release(ddjvu_rectmapper_t *mapper)
     1691{
     1692  GRectMapper *gmapper = (GRectMapper*)mapper;
     1693  if (! gmapper) return;
     1694  delete gmapper;
     1695}
     1696
     1697void
     1698ddjvu_map_point(ddjvu_rectmapper_t *mapper, int *x, int *y)
     1699{
     1700  GRectMapper *gmapper = (GRectMapper*)mapper;
     1701  if (! gmapper) return;
     1702  gmapper->map(*x,*y);
     1703}
     1704
     1705void
     1706ddjvu_map_rect(ddjvu_rectmapper_t *mapper, ddjvu_rect_t *rect)
     1707{
     1708  GRectMapper *gmapper = (GRectMapper*)mapper;
     1709  if (! gmapper) return;
     1710  GRect grect;
     1711  rect2grect(rect,grect);
     1712  gmapper->map(grect);
     1713  grect2rect(grect,rect);
     1714}
     1715
     1716void
     1717ddjvu_unmap_point(ddjvu_rectmapper_t *mapper, int *x, int *y)
     1718{
     1719  GRectMapper *gmapper = (GRectMapper*)mapper;
     1720  if (! gmapper) return;
     1721  gmapper->unmap(*x,*y);
     1722}
     1723
     1724void
     1725ddjvu_unmap_rect(ddjvu_rectmapper_t *mapper, ddjvu_rect_t *rect)
     1726{
     1727  GRectMapper *gmapper = (GRectMapper*)mapper;
     1728  if (! gmapper) return;
     1729  GRect grect;
     1730  rect2grect(rect,grect);
     1731  gmapper->unmap(grect);
     1732  grect2rect(grect,rect);
    14731733}
    14741734
     
    14821742  uint32_t rgb[3][256];
    14831743  uint32_t palette[6*6*6];
     1744  uint32_t xorval;
    14841745  double gamma;
    14851746  char ditherbits;
     
    15211782        if (sizeof(uint16_t)!=2 || sizeof(uint32_t)!=4)
    15221783          return fmt_error(fmt);
    1523         if (nargs!=3 || !args)
     1784        if (!args || nargs<3 || nargs>4)
    15241785          return fmt_error(fmt);
    1525         for (int j=0; j<3; j++)
     1786        { // extra nesting for windows
     1787          for (int j=0; j<3; j++)
    15261788          {
    15271789            int shift = 0;
     
    15341796              fmt->rgb[j][i] = (mask & ((int)((i*mask+127.0)/255.0)))<<shift;
    15351797          }
     1798        }
     1799        if (nargs >= 4)
     1800          fmt->xorval = args[3];
    15361801        break;
    15371802      }
     
    15401805        if (nargs!=6*6*6 || !args)
    15411806          return fmt_error(fmt);
    1542         for (int k=0; k<6*6*6; k++)
    1543           fmt->palette[k] = args[k];
    1544         int j=0;
    1545         for(int i=0; i<6; i++)
    1546           for(; j < (i+1)*0x33 - 0x19 && j<256; j++)
     1807        { // extra nesting for windows
     1808          for (int k=0; k<6*6*6; k++)
     1809            fmt->palette[k] = args[k];
     1810        }
     1811        { // extra nesting for windows
     1812          int j=0;
     1813          for(int i=0; i<6; i++)
     1814            for(; j < (i+1)*0x33 - 0x19 && j<256; j++)
    15471815            {
    15481816              fmt->rgb[0][j] = i * 6 * 6;
     
    15501818              fmt->rgb[2][j] = i;
    15511819            }
     1820        }
    15521821        break;
    15531822      }
     
    16021871{
    16031872  const uint32_t (*r)[256] = fmt->rgb;
     1873  const uint32_t xorval = fmt->xorval;
    16041874  switch(fmt->style)
    16051875    {
     
    16211891        uint16_t *b = (uint16_t*)buf;
    16221892        while (--w >= 0) {
    1623           b[0]=(r[0][p->r]+r[1][p->g]+r[2][p->b]);
     1893          b[0]=(r[0][p->r]|r[1][p->g]|r[2][p->b])^xorval;
    16241894          b+=1; p+=1;
    16251895        }
     
    16301900        uint32_t *b = (uint32_t*)buf;
    16311901        while (--w >= 0) {
    1632           b[0]=(r[0][p->r]+r[1][p->g]+r[2][p->b]);
     1902          b[0]=(r[0][p->r]|r[1][p->g]|r[2][p->b])^xorval;
    16331903          b+=1; p+=1;
    16341904        }
     
    17001970{
    17011971  const uint32_t (*r)[256] = fmt->rgb;
     1972  const uint32_t xorval = fmt->xorval;
    17021973  switch(fmt->style)
    17031974    {
     
    17161987        while (--w >= 0) {
    17171988          unsigned char x = g[*p];
    1718           b[0]=(r[0][x]+r[1][x]+r[2][x]);
     1989          b[0]=(r[0][x]|r[1][x]|r[2][x])^xorval;
    17191990          b+=1; p+=1;
    17201991        }
     
    17261997        while (--w >= 0) {
    17271998          unsigned char x = g[*p];
    1728           b[0]=(r[0][x]+r[1][x]+r[2][x]);
     1999          b[0]=(r[0][x]|r[1][x]|r[2][x])^xorval;
    17292000          b+=1; p+=1;
    17302001        }
     
    18262097      GP<GPixmap> pm;
    18272098      GP<GBitmap> bm;
    1828       GRect prect;
    1829       GRect rrect;
     2099      GRect prect, rrect;
     2100      rect2grect(pagerect, prect);
     2101      rect2grect(renderrect, rrect);
    18302102      if (pixelformat && pixelformat->ytoptobottom)
    18312103        {
    1832           prect.xmin = pagerect->x;
    1833           prect.xmax = prect.xmin + pagerect->w;
    18342104          prect.ymin = renderrect->y + renderrect->h;
    18352105          prect.ymax = prect.ymin + pagerect->h;
    1836           rrect.xmin = renderrect->x;
    1837           rrect.xmax = rrect.xmin + renderrect->w;
    18382106          rrect.ymin = pagerect->y + pagerect->h;
    1839           rrect.ymax = rrect.ymin + renderrect->h;
    1840         }
    1841       else
    1842         {
    1843           prect.xmin = pagerect->x;
    1844           prect.xmax = prect.xmin + pagerect->w;
    1845           prect.ymin = pagerect->y;
    1846           prect.ymax = prect.ymin + pagerect->h;
    1847           rrect.xmin = renderrect->x;
    1848           rrect.xmax = rrect.xmin + renderrect->w;
    1849           rrect.ymin = renderrect->y;
    18502107          rrect.ymax = rrect.ymin + renderrect->h;
    18512108        }
     
    18772134            case DDJVU_RENDER_FOREGROUND:
    18782135              pm = img->get_fg_pixmap(rrect, prect, pixelformat->gamma);
     2136              if (! pm)
     2137                bm = img->get_bitmap(rrect, prect);
    18792138              break;
    18802139            }
     
    18962155  G_CATCH(ex)
    18972156    {
    1898       ERROR(page, ex);
     2157      ERROR1(page, ex);
    18992158    }
    19002159  G_ENDCATCH;
     
    19232182              pool->get_data( (void*)(char*)thumb->data, 0, size);
    19242183            }
    1925           G_CATCH(ex)
     2184          G_CATCH_ALL
    19262185            {
    19272186              thumb->data.empty();
     
    19752234  G_CATCH(ex)
    19762235    {
    1977       ERROR(document, ex);
     2236      ERROR1(document, ex);
    19782237    }
    19792238  G_ENDCATCH;
     
    20322291  G_CATCH(ex)
    20332292    {
    2034       ERROR(document, ex);
     2293      ERROR1(document, ex);
    20352294    }
    20362295  G_ENDCATCH;
     
    21082367      r = self->run();
    21092368    }
    2110   G_CATCH(ex)
     2369  G_CATCH_ALL
    21112370    {
    21122371      r = DDJVU_JOB_FAILED;
     
    21642423};
    21652424
     2425bool
     2426ddjvu_printjob_s::inherits(const GUTF8String &classname)
     2427{
     2428  return (classname == "ddjvu_printjob_s")
     2429    || ddjvu_runnablejob_s::inherits(classname);
     2430}
     2431
    21662432ddjvu_status_t
    21672433ddjvu_printjob_s::run()
    21682434{
     2435  mydoc->doc->wait_for_complete_init();
    21692436  progress_low = 0;
    21702437  progress_high = 1;
     
    21772444}
    21782445
    2179 bool
    2180 ddjvu_printjob_s::inherits(const GUTF8String &classname)
    2181 {
    2182   return (classname == "ddjvu_printjob_s")
    2183     || ddjvu_runnablejob_s::inherits(classname);
    2184 }
    2185 
    21862446void
    21872447ddjvu_printjob_s::cbrefresh(void *data)
     
    21912451    {
    21922452      msg_push(xhead(DDJVU_INFO,self), msg_prep_info("Print job stopped"));
    2193       G_THROW("STOP");
     2453      G_THROW(DataPool::Stop);
    21942454    }
    21952455}
     
    24682728        unref(job);
    24692729      job = 0;
    2470       ERROR(document, ex);
     2730      ERROR1(document, ex);
    24712731    }
    24722732  G_ENDCATCH;
     
    24752735
    24762736// ----------------------------------------
    2477 // Not yet implemented
     2737// Saving (insufficiently tested)
     2738
     2739struct DJVUNS ddjvu_savejob_s : public ddjvu_runnablejob_s
     2740{
     2741  GP<ByteStream> obs;
     2742  virtual ddjvu_status_t run();
     2743  // virtual port functions:
     2744  virtual bool inherits(const GUTF8String&);
     2745  virtual void notify_file_flags_changed(const DjVuFile*, long, long);
     2746  // data
     2747  GMonitor monitor;
     2748};
     2749
     2750bool
     2751ddjvu_savejob_s::inherits(const GUTF8String &classname)
     2752{
     2753  return (classname == "ddjvu_savejob_s")
     2754    || ddjvu_runnablejob_s::inherits(classname);
     2755}
     2756
     2757void
     2758ddjvu_savejob_s::notify_file_flags_changed(const DjVuFile *file, long mask, long)
     2759{
     2760  if (mask & (DjVuFile::ALL_DATA_PRESENT ||
     2761              DjVuFile::DECODE_FAILED || DjVuFile::DECODE_STOPPED ||
     2762              DjVuFile::STOPPED || DjVuFile::DECODE_STOPPED ))
     2763    {
     2764      GMonitorLock lock(&monitor);
     2765      monitor.signal();
     2766    }
     2767}
     2768
     2769ddjvu_status_t
     2770ddjvu_savejob_s::run()
     2771{
     2772  DjVuDocument *doc = mydoc->doc;
     2773  doc->wait_for_complete_init();
     2774  // Determine which components to save
     2775  int ncomp;
     2776  GArray<GUTF8String> comp_ids;
     2777  GPArray<DjVuFile> comp_files;
     2778  if (doc->get_doc_type()==DjVuDocument::BUNDLED ||
     2779      doc->get_doc_type()==DjVuDocument::INDIRECT)
     2780    {
     2781      GP<DjVmDir> dir = doc->get_djvm_dir();
     2782      ncomp = dir->get_files_num();
     2783      comp_ids.resize(ncomp - 1);
     2784      comp_files.resize(ncomp - 1);
     2785      GPList<DjVmDir::File> flist = dir->get_files_list();
     2786      GPosition pos=flist;
     2787      for (int comp=0; comp<ncomp; ++pos, ++comp)
     2788        comp_ids[comp] = flist[pos]->get_load_name();
     2789    }
     2790  else
     2791    {
     2792      ncomp = doc->get_pages_num();
     2793      comp_ids.resize(ncomp - 1);
     2794      comp_files.resize(ncomp - 1);
     2795      { // extra nesting for windows
     2796        for (int comp=0; comp<ncomp; comp++)
     2797          comp_ids[comp] = GUTF8String(comp);
     2798      }
     2799    }
     2800  // Monitoring download progress
     2801  int lo = 0;
     2802  int hi = 0;
     2803  get_portcaster()->add_route(doc, this);
     2804  while (lo < ncomp && !mystop)
     2805    {
     2806      int in_progress = 0;
     2807      GMonitorLock lock(&monitor);
     2808      while (lo<hi && comp_files[lo]->is_data_present())
     2809        lo += 1;
     2810      { // extra nesting for windows
     2811        for (int comp=lo; comp<hi; comp++)
     2812          if (! comp_files[comp]->is_data_present())
     2813            in_progress += 1;
     2814      }
     2815      while (hi<ncomp && in_progress < 2)
     2816        {
     2817          comp_files[hi] = doc->get_djvu_file(comp_ids[hi]);
     2818          in_progress += 1;
     2819          hi += 1;
     2820        }
     2821      if (in_progress > 0)
     2822        monitor.wait();
     2823    }
     2824  if (mystop)
     2825    G_THROW("STOP");
     2826  // Saving!
     2827  doc->write(obs);
     2828  return DDJVU_JOB_OK;
     2829}
     2830
    24782831
    24792832ddjvu_job_t *
     
    24812834                    int optc, const char * const * optv)
    24822835{
    2483   return 0;
    2484 }
     2836  ddjvu_savejob_s *job = 0;
     2837  G_TRY
     2838    {
     2839      job = new ddjvu_savejob_s;
     2840      ref(job);
     2841      job->myctx = document->myctx;
     2842      job->mydoc = document;
     2843      // parse options
     2844      while (optc>0)
     2845        {
     2846          GNativeString narg(optv[0]);
     2847          GUTF8String uarg = narg;
     2848          complain(uarg, "Unrecognized option.");
     2849          optc -= 1;
     2850          optv += 1;
     2851        }
     2852      // go
     2853      job->obs = ByteStream::create(output, "wb", false);
     2854      job->start();
     2855    }
     2856  G_CATCH(ex)
     2857    {
     2858      if (job)
     2859        unref(job);
     2860      job = 0;
     2861      ERROR1(document, ex);
     2862    }
     2863  G_ENDCATCH;
     2864  return job;
     2865}
     2866
    24852867
    24862868
     
    25042886miniexp_protect(ddjvu_document_t *document, miniexp_t expr)
    25052887{
    2506   for(miniexp_t p=document->protect; miniexp_consp(p); p=miniexp_cdr(p))
    2507     if (miniexp_car(p) == expr)
    2508       return;
     2888  { // extra nesting for windows
     2889    for(miniexp_t p=document->protect; miniexp_consp(p); p=miniexp_cdr(p))
     2890      if (miniexp_car(p) == expr)
     2891        return;
     2892  }
    25092893  if (miniexp_consp(expr) || miniexp_objectp(expr))
    25102894    document->protect = miniexp_cons(expr, document->protect);
     
    25762960  G_CATCH(ex)
    25772961    {
    2578       ERROR(document, ex);
     2962      ERROR1(document, ex);
    25792963    }
    25802964  G_ENDCATCH;
     
    26122996  minivar_t a;
    26132997  bool gather = zone.children.isempty();
    2614   for (GPosition pos=zone.children; pos; ++pos)
    2615     if (zone.children[pos].ztype > detail)
    2616       gather = true;
     2998  { // extra nesting for windows
     2999    for (GPosition pos=zone.children; pos; ++pos)
     3000      if (zone.children[pos].ztype > detail)
     3001        gather = true;
     3002  }
    26173003  if (gather)
    26183004    {
     
    26693055          minivar_t result;
    26703056          DjVuTXT::ZoneType detail = DjVuTXT::CHARACTER;
    2671           for (int i=0; zone_names[i].name; i++)
    2672             if (maxdetail && !strcmp(maxdetail, zone_names[i].name))
    2673               detail = zone_names[i].ztype;
     3057          { // extra nesting for windows
     3058            for (int i=0; zone_names[i].name; i++)
     3059              if (maxdetail && !strcmp(maxdetail, zone_names[i].name))
     3060                detail = zone_names[i].ztype;
     3061          }
    26743062          result = pagetext_sub(txt, txt->page_zone, detail);
    26753063          miniexp_protect(document, result);
     
    26793067  G_CATCH(ex)
    26803068    {
    2681       ERROR(document, ex);
     3069      ERROR1(document, ex);
    26823070    }
    26833071  G_ENDCATCH;
     
    27493137      anno_dat.blen--;
    27503138      char c = anno_dat.buf[0];
    2751       for (int i=0; i<anno_dat.blen; i++)
    2752         anno_dat.buf[i] = anno_dat.buf[i+1];
     3139      { // extra nesting for windows
     3140        for (int i=0; i<anno_dat.blen; i++)
     3141          anno_dat.buf[i] = anno_dat.buf[i+1];
     3142      }
    27533143      return c;
    27543144    }
     
    27973187  if (anno_dat.blen>=(int)sizeof(anno_dat.buf))
    27983188    return EOF;
    2799   for (int i=anno_dat.blen; i>0; i--)
    2800     anno_dat.buf[i] = anno_dat.buf[i-1];
     3189  { // extra nesting for windows
     3190    for (int i=anno_dat.blen; i>0; i--)
     3191      anno_dat.buf[i] = anno_dat.buf[i-1];
     3192  }
    28013193  anno_dat.blen += 1;
    28023194  anno_dat.buf[0] = c;
     
    28143206    raw += GUTF8String(buffer, length);
    28153207  // Prepare
    2816   minivar_t a;
     3208  miniexp_t a;
    28173209  anno_dat.s = (const char*)raw;
    28183210  anno_dat.compat = anno_compat(anno_dat.s);
     
    28203212  anno_dat.state = 0;
    28213213  anno_dat.eof = false;
     3214  int (*saved_getc)(void) = minilisp_getc;
     3215  int (*saved_ungetc)(int) = minilisp_ungetc;
     3216  // Process
    28223217  minilisp_getc = anno_getc;
    28233218  minilisp_ungetc = anno_ungetc;
    2824   // Process
    28253219  while (* anno_dat.s )
    28263220    if ((a = miniexp_read()) != miniexp_dummy)
    28273221      result = miniexp_cons(a, result);
     3222  // Restore
     3223  minilisp_getc = saved_getc;
     3224  minilisp_ungetc = saved_ungetc;
    28283225}
    28293226
     
    28753272  G_CATCH(ex)
    28763273    {
    2877       ERROR(document, ex);
     3274      ERROR1(document, ex);
    28783275    }
    28793276  G_ENDCATCH;
     
    29873384  if (! k) return 0;
    29883385  i = 0;
    2989   for (GPosition p=m; p; ++p)
    2990     k[i++] = m.key(p);
     3386  { // extra nesting for windows
     3387    for (GPosition p=m; p; ++p)
     3388      k[i++] = m.key(p);
     3389  }
    29913390  k[i] = 0;
    29923391  return k;
  • trunk/libdjvu/ddjvuapi.h

    r15 r17  
    5353//C- */
    5454
    55 /* $Id: ddjvuapi.h,v 1.34 2005/10/31 16:44:10 leonb Exp $ */
     55/* $Id: ddjvuapi.h,v 1.46 2006/01/30 14:28:55 leonb Exp $ */
    5656
    5757#ifndef DDJVUAPI_H
     
    100100   Version   Change
    101101   -----------------------------
    102      16    Addition of miniexp.h and related functions:
    103               ddjvu_miniexp_release()
    104               ddjvu_document_get_outline/pagetext/pageanno()
    105               ddjvu_anno_get_XXX()
     102     17    Addition of:
     103              ddjvu_page_get_initial_rotation(), ddjvu_code_get_version()
     104              ddjvu_document_get_filenum(), ddjvu_document_get_fileinfo()
     105              ddjvu_document_search_pageno(), ddjvu_document_check_pagedata()
     106              ddjvu_rectmapper_t and related functions.
     107     16    Addition of:
     108              miniexp.h and related functions.
    106109     15    Addition of:
    107110              ddjvu_document_get_pageinfo()
     
    110113*/
    111114
    112 #define DDJVUAPI_VERSION 16
    113 
    114 typedef struct ddjvu_context_s  ddjvu_context_t;
    115 typedef union  ddjvu_message_s  ddjvu_message_t;
    116 typedef struct ddjvu_job_s      ddjvu_job_t;
    117 typedef struct ddjvu_document_s ddjvu_document_t;
    118 typedef struct ddjvu_page_s     ddjvu_page_t;
    119 typedef struct ddjvu_format_s   ddjvu_format_t;
     115#define DDJVUAPI_VERSION 17
     116
     117typedef struct ddjvu_context_s    ddjvu_context_t;
     118typedef union  ddjvu_message_s    ddjvu_message_t;
     119typedef struct ddjvu_job_s        ddjvu_job_t;
     120typedef struct ddjvu_document_s   ddjvu_document_t;
     121typedef struct ddjvu_page_s       ddjvu_page_t;
     122typedef struct ddjvu_format_s     ddjvu_format_t;
     123typedef struct ddjvu_rect_s       ddjvu_rect_t;
     124typedef struct ddjvu_rectmapper_s ddjvu_rectmapper_t;
    120125
    121126
     
    140145   - Please read the djvu man page: <"tools/djvu.1">.
    141146   - Please browse the file format specifications
    142      <"doc/djvu3changes.txt"> and <"doc/djvu2spec.djvu">.
     147     <"doc/djvu3changes.txt"> and <"doc/djvu3spec.djvu">.
    143148*/
    144149
     
    404409   asynchronously.  Member <message> is the error message.
    405410   Members <function>, <filename> and <lineno>
    406    indicates the place where the error was detected.
    407 */
     411   indicates the place where the error was detected. */
    408412
    409413struct ddjvu_message_error_s {  /* ddjvu_message_t::m_error */
     
    466470
    467471
    468 /* ddjvu_document_create_from_file ---
     472/* ddjvu_document_create_by_filename ---
    469473   Creates a document for a DjVu document stored in a file.
    470474   The document will directly access the specified DjVu file
     
    595599   about the document has been obtained and decoded.
    596600   Not much can be done before this happens.
    597  */
     601   Call <ddjvu_document_decoding_status> to determine
     602   whether the operation was successful. */
    598603
    599604struct ddjvu_message_docinfo_s {
     
    629634
    630635
     636
     637/* ------- ADVANCED ------- */
     638
     639
     640/* ddjvu_document_get_filenum --
     641   Returns the number of component files.
     642   This function might return 1 when called
     643   before receiving a <m_docinfo> message */
     644   
     645DDJVUAPI int
     646ddjvu_document_get_filenum(ddjvu_document_t *document);
     647
     648
     649/* ddjvu_document_get_fileinfo --
     650   Returns information about component file <fileno>.
     651   This function might return <DDJVU_JOB_STARTED> when
     652   called before receiving a <m_docinfo> message.
     653   String pointers in the returned data structure
     654   might be null. Strings are UTF8 encoded and remain
     655   allocated as long as the ddjvu_document_t object exists.*/
     656
     657typedef struct ddjvu_fileinfo_s {
     658  char  type;                   /* [P]age, [T]humbnails, [I]nclude. */
     659  int   pageno;                 /* Zero when not applicable. */
     660  int   size;                   /* Zero when unknown. */
     661  const char *id;               /* File identifier. */
     662  const char *name;             /* Name for indirect documents. */
     663  const char *title;            /* Page title. */
     664} ddjvu_fileinfo_t;
     665
     666DDJVUAPI ddjvu_status_t
     667ddjvu_document_get_fileinfo(ddjvu_document_t *document,
     668                            int fileno, ddjvu_fileinfo_t *info);
     669
     670
     671/* ddjvu_document_search_pageno ---
     672   Searches the page number of the page named <name>.
     673   Argument <name> is an UTF8 encoded string that is
     674   matched against the page ids, page names, and page titles.
     675   Numerical names are also interpreted as page numbers.
     676   This functions returns <-1> when an error occurs,
     677   when the page is not found, or when called before
     678   receiving a <m_docinfo> message. */
     679
     680DDJVUAPI int
     681ddjvu_document_search_pageno(ddjvu_document_t *document, const char *name);
     682
     683
     684/* ddjvu_document_check_pagedata ---
     685   Returns a non zero result if the data for page <pageno>
     686   is already in memory. When this is the case, functions
     687   <ddjvu_document_get_pageinfo>, <ddjvu_document_get_pagetext>
     688   and <ddjvu_document_get_pageanno> return the information immediately.
     689   This function causes the emission of <m_pageinfo> messages
     690   with zero in the <m_any.page> field.
     691*/
     692
     693DDJVUAPI int
     694ddjvu_document_check_pagedata(ddjvu_document_t *document, int pageno);
     695
     696
    631697/* ddjvu_document_get_pageinfo ---
    632698   Attempts to obtain information about page <pageno>
     
    644710   if (r>=DDJVU_JOB_FAILED)
    645711     signal_error();
    646 
    647    When the djvu document comes from the network, the above idiom
    648    is very slow because it waits until the data for all page is present.
    649712*/     
    650713
    651714typedef struct ddjvu_pageinfo_s {
    652   int width;
    653   int height;
    654   int dpi;
     715  int width;                    /* page width (in pixels) */
     716  int height;                   /* page height (in pixels) */
     717  int dpi;                      /* page resolution (in dots per inche) */
    655718} ddjvu_pageinfo_t;
    656719
    657720DDJVUAPI ddjvu_status_t
    658 ddjvu_document_get_pageinfo(ddjvu_document_t *document, int pageno,
    659                             ddjvu_pageinfo_t *info);
     721ddjvu_document_get_pageinfo(ddjvu_document_t *document,
     722                            int pageno, ddjvu_pageinfo_t *info);
     723
     724
    660725
    661726
     
    670735   <ddjvu_page_t> object with this function.  Argument
    671736   <pageno> indicates the page number, starting with page
    672    <0> to <pagenum-1>. This function can be called
    673    immediately after creating the <ddjvu_document_t> object.
    674    It also initiates the data transfer and the decoding threads
    675    for the specified page.  Various messages will document
    676    the progress of these operations. Error messages will be
    677    generated if the page does not exists. */
     737   <0> to <pagenum-1>. This function may return NULL
     738   when called before receiving the <m_docinfo> message.
     739   Calling this function also initiates the data transfer
     740   and the decoding threads for the specified page. 
     741   Various messages will document the progress of these
     742   operations. Error messages will be generated if
     743   the page does not exists. */
    678744
    679745DDJVUAPI ddjvu_page_t *
     
    743809   - when the page decoding thread terminates.
    744810   You can distinguish both cases using
    745    function ddjvu_page_decoding_done().
     811   function ddjvu_page_decoding_status().
    746812   Messages <m_pageinfo> are also generated as a consequence of
    747813   functions such as <ddjvu_document_get_pageinfo>.
     
    793859   objects.  When receiving <m_redisplay>, the viewer should invalidate the
    794860   image area so that the gui toolkint calls the repaint event handler. This
    795    handler should call ddjvu_page_render() and paint the part og the
     861   handler should call ddjvu_page_render() and paint the part of the
    796862   image that needs repainting. */
    797863
     
    841907ddjvu_page_get_version(ddjvu_page_t *page);
    842908
     909/* ddjvu_code_get_version ---
     910   Returns the version of the djvu file format
     911   implemented by this library. More or less graceful
     912   degradation might arise if this is smaller than
     913   the number returned by <ddjvu_page_get_version>. */
     914
     915DDJVUAPI int
     916ddjvu_code_get_version(void);
    843917
    844918/* ddjvu_page_get_type ---
     
    856930DDJVUAPI ddjvu_page_type_t
    857931ddjvu_page_get_type(ddjvu_page_t *page);
     932
    858933
    859934/* ddjvu_page_get_short_description ---
     
    873948
    874949
    875 /* ddjvu_page_get_rotation ---
    876    Returns the rotation angle for the DjVu page.
    877    The rotation is automatically taken into account
    878    by <ddjvu_page_render>, <ddjvu_page_get_width>
    879    and <ddjvu_page_get_height>. */
     950/* ddjvu_page_set_rotation ---
     951   Changes the counter-clockwise rotation angle for a DjVu page.
     952   Calling this function before receiving a <m_pageinfo>
     953   message has no good effect. */
    880954
    881955typedef enum {
     
    886960} ddjvu_page_rotation_t;
    887961
     962DDJVUAPI void
     963ddjvu_page_set_rotation(ddjvu_page_t *page,
     964                        ddjvu_page_rotation_t rot);
     965
     966
     967/* ddjvu_page_get_rotation ---
     968   Returns the counter-clockwise rotation angle for the DjVu page.
     969   The rotation is automatically taken into account
     970   by <ddjvu_page_render>, <ddjvu_page_get_width>
     971   and <ddjvu_page_get_height>. */
     972
    888973DDJVUAPI ddjvu_page_rotation_t
    889974ddjvu_page_get_rotation(ddjvu_page_t *page);
    890975
    891976
    892 /* ddjvu_page_set_rotation ---
    893    Changes the rotation angle for a DjVu page.
    894    Calling this function before receiving a <m_pageinfo>
    895    message has no effect. */
    896 
    897 DDJVUAPI void
    898 ddjvu_page_set_rotation(ddjvu_page_t *page,
    899                         ddjvu_page_rotation_t rot);
     977/* ddjvu_page_get_initial_rotation ---
     978   Returns the page rotation specified by the
     979   orientation flags in the DjVu file.
     980   [brain damage warning] This is useful because
     981   maparea coordinates in the annotation chunks
     982   are expressed relative to the rotated coordinates
     983   whereas text coordinates in the hidden text data
     984   are expressed relative to the unrotated coordinates. */
     985
     986DDJVUAPI ddjvu_page_rotation_t
     987ddjvu_page_get_initial_rotation(ddjvu_page_t *page);
    900988
    901989
    902990
    903991/* ------- RENDER ------- */
    904 
    905 
    906 /* ddjvu_rect_t ---
    907    This structure specifies the location of a rectangle.
    908    Coordinates are usually expressed in pixels relative to
    909    the BOTTOM LEFT CORNER (but see ddjvu_format_set_y_direction).
    910    Members <x> and <y> indicate the position of the bottom left
    911    corner of the rectangle Members <w> and <h> indicate the
    912    width and height of the rectangle. */
    913 
    914 typedef struct ddjvu_rect_s {
    915   int x, y;
    916   unsigned int w, h;
    917 } ddjvu_rect_t;
    918992
    919993
     
    9311005
    9321006
     1007/* ddjvu_rect_t ---
     1008   This structure specifies the location of a rectangle.
     1009   Coordinates are usually expressed in pixels relative to
     1010   the BOTTOM LEFT CORNER (but see ddjvu_format_set_y_direction).
     1011   Members <x> and <y> indicate the position of the bottom left
     1012   corner of the rectangle Members <w> and <h> indicate the
     1013   width and height of the rectangle. */
     1014
     1015struct ddjvu_rect_s {
     1016  int x, y;
     1017  unsigned int w, h;
     1018};
     1019
    9331020
    9341021/* ddjvu_page_render --
     
    9631050                  unsigned long rowsize,
    9641051                  char *imagebuffer );
     1052
     1053
     1054
     1055
     1056/* -------------------------------------------------- */
     1057/* COORDINATE TRANSFORMS                              */
     1058/* -------------------------------------------------- */
     1059
     1060/* ddjvu_rectmapper_create --
     1061   Creates a <ddjvu_rectmapper_t> data structure
     1062   representing an affine coordinate transformation that
     1063   maps points from rectangle <input> to rectangle <output>.
     1064   The transformation maintains the positions relative
     1065   to the coordinates of the rectangle corners. */
     1066
     1067DDJVUAPI ddjvu_rectmapper_t *
     1068ddjvu_rectmapper_create(ddjvu_rect_t *input, ddjvu_rect_t *output);
     1069
     1070
     1071/* ddjvu_rectmapper_modify ---
     1072   Modifies the coordinate transform <mapper> by redefining
     1073   which corners of the output rectangle match those of the
     1074   input rectangle. This function first applies a counter-clockwise
     1075   rotation of <rotation> quarter-turns, and then reverses the X
     1076   (resp. Y) coordinates when <mirrorx> (resp. <mirrory>) is non zero. */
     1077
     1078DDJVUAPI void
     1079ddjvu_rectmapper_modify(ddjvu_rectmapper_t *mapper,
     1080                        int rotation, int mirrorx, int mirrory);
     1081
     1082
     1083/* ddjvu_rectmapper_release ---
     1084   Destroys the <ddjvu_rect_mapper_t> structure
     1085   returned by <ddjvu_rect_mapper_create>. */
     1086
     1087DDJVUAPI void
     1088ddjvu_rectmapper_release(ddjvu_rectmapper_t *mapper);
     1089
     1090/* ddjvu_map_point, ddjvu_map_rect ---
     1091   Applies the coordinate transform
     1092   to a point or a rectangle */
     1093
     1094DDJVUAPI void
     1095ddjvu_map_point(ddjvu_rectmapper_t *mapper, int *x, int *y);
     1096
     1097DDJVUAPI void
     1098ddjvu_map_rect(ddjvu_rectmapper_t *mapper, ddjvu_rect_t *rect);
     1099
     1100
     1101/* ddjvu_unmap_point, ddjvu_unmap_rect ---
     1102   Applies the inverse coordinate transform
     1103   to a point or a rectangle */
     1104
     1105DDJVUAPI void
     1106ddjvu_unmap_point(ddjvu_rectmapper_t *mapper, int *x, int *y);
     1107
     1108DDJVUAPI void
     1109ddjvu_unmap_rect(ddjvu_rectmapper_t *mapper, ddjvu_rect_t *rect);
    9651110
    9661111
     
    9921137   Argument <args> is an array of <nargs> unsigned ints
    9931138   providing additionnal information:
    994    - When style is <RGBMASK*>, argument <nargs> must be <3>
    995      and array <args> contains three contiguous bit masks for
    996      the red, green, and blue components of each pixel.
     1139   - When style is <RGBMASK*>, argument <nargs> must be <3> or <4>.
     1140     The three first entries of array <args> are three contiguous
     1141     bit masks for the red, green, and blue components of each pixel.
     1142     The resulting color is then xored with the optional fourth entry.
    9971143   - When style is <PALETTE*>, argument <nargs> must be <216>
    9981144     and array <args> contains the 6*6*6 entries of a web
     
    11041250
    11051251
    1106 
    11071252/* ddjvu_message_t::m_progress ---
    11081253   These messages are generated to indicate progress
     
    11351280
    11361281
    1137 /* NOT YET IMPLEMENTED ---
     1282/* ddjvu_document_save ---
    11381283   Saves the djvu document as a bundled djvu file.
    11391284   This function works asynchronously in a separate thread.
     
    11451290     
    11461291   The bundled djvu data is written to file <output>
    1147    which must be seekable. Arguments <optc> and <optv>
    1148    exactly like command line arguments of a program.
    1149    The only supported option is "-page=<pagespec>".
    1150    See the man page for <djvups> for more information
    1151    about page specifications.
     1292   which must be seekable. Arguments <optc> and <optv>
     1293   are intended for enabling future extensions
     1294   of this function.
    11521295*/
    11531296DDJVUAPI ddjvu_job_t *
     
    11571300
    11581301
     1302
    11591303/* -------------------------------------------------- */
    11601304/* S-EXPRESSIONS                                      */
    11611305/* -------------------------------------------------- */
     1306
    11621307
    11631308/* DjVu files can contain ancillary information such as
  • trunk/libdjvu/debug.cpp

    r15 r17  
    5353//
    5454// $Id: debug.cpp,v 1.14 2005/05/27 14:26:00 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifdef HAVE_CONFIG_H
  • trunk/libdjvu/debug.h

    r15 r17  
    5353//
    5454// $Id: debug.h,v 1.12 2005/05/27 14:26:01 leonb Exp $
    55 // $Name: release_3_5_16 $
     55// $Name: $
    5656
    5757#ifndef _DEBUG_H_
  • trunk/libdjvu/miniexp.cpp

    r15 r17  
    1515// -------------------------------------------------------------------
    1616*/
    17 /* $Id: miniexp.cpp,v 1.5 2005/09/14 02:46:54 leonb Exp $ */
     17/* $Id: miniexp.cpp,v 1.12 2006/02/21 19:27:41 leonb Exp $ */
    1818
    1919#ifdef HAVE_CONFIG_H
     
    108108symtable_t::~symtable_t()
    109109{
    110   for (int i=0; i<nbuckets; i++)
     110  int i=0;
     111  for (; i<nbuckets; i++)
    111112    while (buckets[i])
    112113      {
     
    124125  struct sym **b = new sym*[nb];
    125126  memset(b, 0, nb*sizeof(sym*));
    126   for (int i=0; i<nbuckets; i++)
     127  int i=0;
     128  for (; i<nbuckets; i++)
    127129    while (buckets[i])
    128130      {
     
    363365      // mark
    364366      minivar_t::mark(gc_mark);
    365       for (int i=0; i<recentsize; i++)
    366         gc_mark((miniexp_t*)&gc.recent[i]);
     367      { // extra nesting for windows
     368        for (int i=0; i<recentsize; i++)
     369          gc_mark((miniexp_t*)&gc.recent[i]);
     370      }
    367371      // sweep
    368372      gc.objs_free = gc.pairs_free = 0;
     
    448452minilisp_gc(void)
    449453{
    450   for (int i=0; i<recentsize; i++)
     454  int i;
     455  for (i=0; i<recentsize; i++)
    451456    gc.recent[i] = 0;
    452457  gc_run();
     
    674679}
    675680
    676 void
    677 miniobj_t::mark(minilisp_mark_t action)
     681void 
     682miniobj_t::mark(minilisp_mark_t*)
    678683{
    679684}
     
    789794          static char *tr1 = "\"\\tnrbf";
    790795          static char *tr2 = "\"\\\t\n\r\b\f";
    791           for (int i=0; tr2[i]; i++)
    792             if (c == tr2[i])
    793               letter = tr1[i];
     796          { // extra nesting for windows
     797            for (int i=0; tr2[i]; i++)
     798              if (c == tr2[i])
     799                letter = tr1[i];
     800          }
    794801          char_out('\\', d, n);
    795802          if (letter)
     
    857864miniexp_concat(miniexp_t p)
    858865{
    859   minivar_t l = p;
     866  miniexp_t l = p;
    860867  const char *s;
    861868  int n = 0;
     
    881888/* -------------------------------------------------- */
    882889
     890extern "C" {
     891  // SunCC needs this to be defined inside extern "C" { ... }
     892  // Beware the difference between extern "C" {...} and extern "C".
     893  miniexp_t (*minilisp_macrochar_parser[128])(void);
     894}
     895
    883896/* --------- OUTPUT */
    884 
    885 int minilisp_print_7bits = 1;
    886897
    887898static FILE *outputfile;
     
    897908
    898909int (*minilisp_puts)(const char *s) = stdio_puts;
     910
     911int minilisp_print_7bits = 1;
    899912
    900913void
     
    11331146  printer.print(p);
    11341147  // check
    1135   ASSERT(! printer.l);
     1148  ASSERT(printer.l == 0);
    11361149  return p;
    11371150}
     
    11451158}
    11461159
     1160/* --------- PNAME */
     1161
     1162static struct {
     1163  char *b; int l; int m;
     1164} pname_data;
     1165
     1166static int
     1167pname_puts(const char *s)
     1168{
     1169  int x = strlen(s);
     1170  if (pname_data.l + x >= pname_data.m)
     1171    {
     1172      int nm = pname_data.l + x + 256;
     1173      char *nb = new char[nm+1];
     1174      memcpy(nb, pname_data.b, pname_data.l);
     1175      delete [] pname_data.b;
     1176      pname_data.m = nm;
     1177      pname_data.b = nb;
     1178    }
     1179  strcpy(pname_data.b + pname_data.l, s);
     1180  pname_data.l += x;
     1181  return x;
     1182}
     1183
     1184miniexp_t
     1185miniexp_pname(miniexp_t p, int width)
     1186{
     1187  minivar_t r;
     1188  int (*saved)(const char*) = minilisp_puts;
     1189  pname_data.b = 0;
     1190  pname_data.m = pname_data.l = 0;
     1191  try
     1192    {
     1193      minilisp_puts = pname_puts;
     1194      if (width > 0)
     1195        miniexp_pprin(p, width);
     1196      else
     1197        miniexp_prin(p);
     1198      minilisp_puts = saved;
     1199      r = miniexp_string(pname_data.b);
     1200      delete [] pname_data.b;
     1201      pname_data.b = 0;
     1202    }
     1203  catch(...)
     1204    {
     1205      minilisp_puts = saved;
     1206      delete [] pname_data.b;
     1207      pname_data.b = 0;
     1208    }
     1209  return r;
     1210}
     1211
     1212
     1213
    11471214/* --------- INPUT */
    11481215
     
    11671234
    11681235int (*minilisp_getc)(void) = stdio_getc;
     1236
    11691237int (*minilisp_ungetc)(int c) = stdio_ungetc;
    11701238
     
    11761244  minilisp_ungetc = stdio_ungetc;
    11771245}
    1178 
    1179 miniexp_t (*minilisp_macrochar_parser[128])(void);
    11801246
    11811247static void
     
    12751341          static char *tr1 = "tnrbfva";
    12761342          static char *tr2 = "\t\n\r\b\f\013\007";
    1277           for (int i=0; tr1[i]; i++)
    1278             if (c == tr1[i])
    1279               c = tr2[i];
     1343          { // extra nesting for windows
     1344            for (int i=0; tr1[i]; i++)
     1345              if (c == tr1[i])
     1346                c = tr2[i];
     1347          }
    12801348        }
    12811349      append(c,s,l,m);
     
    13791447                }
    13801448              p = read_miniexp(c);
    1381               if (p == miniexp_dummy)
     1449              if ((miniexp_t)p == miniexp_dummy)
    13821450                return miniexp_dummy;
    13831451              *where = miniexp_cons(p, miniexp_nil);
     
    14461514  // clear minivars
    14471515  minivar_t::mark(gc_clear);
    1448   for (int i=0; i<recentsize; i++)
    1449     gc.recent[i] = 0;
     1516  { // extra nesting for windows
     1517    for (int i=0; i<recentsize; i++)
     1518      gc.recent[i] = 0;
     1519  }
    14501520  // collect everything
    14511521  gc_run();
  • trunk/libdjvu/miniexp.h

    r15 r17  
    1515// -------------------------------------------------------------------
    1616*/
    17 /* $Id: miniexp.h,v 1.6 2005/10/29 16:32:21 leonb Exp $ */
     17/* $Id: miniexp.h,v 1.12 2006/02/21 19:27:41 leonb Exp $ */
    1818
    1919#ifndef MINIEXP_H
     
    120120   The empty list. */
    121121
    122 const miniexp_t miniexp_nil = (miniexp_t)(size_t)0;
     122#define miniexp_nil ((miniexp_t)(size_t)0)
    123123
    124124/* miniexp_dummy --
     
    126126   various exceptional conditions. */
    127127
    128 const miniexp_t miniexp_dummy = (miniexp_t)(size_t)2;
     128#define miniexp_dummy ((miniexp_t)(size_t)2)
    129129
    130130/* miniexp_listp --
     
    491491MINILISPAPI miniexp_t miniexp_pprint(miniexp_t p, int width);
    492492
     493/* miniexp_pname --
     494   Returns a string containing the textual representation
     495   of a minilisp expression. Set argument <width> to zero
     496   to output a single line, or to a positive value to
     497   perform pretty line breaks for this intended number of columns.
     498   These functions can cause a garbage collection to occur.
     499   It works by temporarily redefining <minilisp_puts>. */
     500
     501MINILISPAPI miniexp_t miniexp_pname(miniexp_t p, int width);
     502
    493503/* minilisp_print_7bits --
    494504   When this flag is set, all non ascii characters
     
    568578  /* mark: iterates over miniexps contained by this object
    569579     for garbage collecting purposes. */
    570   virtual void mark(minilisp_mark_t action);
     580  virtual void mark(minilisp_mark_t*);
     581
    571582  /* pname: returns a printable name for this object.
    572583     The caller must deallocate the result with delete[]. */
  • trunk/poppler/fontconfig-2.3.2-os2/src/Makefile

    r2 r17  
    11CC=wcl386
    22
    3 CFLAGS=-zq -zp=4 -bm -ox -I.. -ID:\Projects\poppler\expat-1.95.8\lib -ID:\Projects\poppler\freetype-2.1.10\include -DOS2
     3CFLAGS=-zq -zp=4 -bm -ox -I.. -I..\..\expat-1.95.8\lib -I..\..\freetype-2.1.10\include -DOS2
    44
    55LIBS=fontconfig.lib
  • trunk/poppler/mypoppler/poppler/Makefile

    r2 r17  
    33CC=wcl386
    44
    5 CFLAGS=-zq -zp=4 -bm -sg -ox -xs -xr -I.. -ID:\Projects\poppler\freetype-2.1.10\include -ID:\Projects\poppler\fontconfig-2.3.2-os2 -DOS2 -DUSE_ANNOTS_VIEW
     5CFLAGS=-zq -zp=4 -bm -sg -ox -xs -xr -I.. -I..\..\freetype-2.1.10\include -I..\..\fontconfig-2.3.2-os2 -DOS2 -DUSE_ANNOTS_VIEW
    66
    77LIBS=libpoppler.lib
  • trunk/poppler/mypoppler/splash/Makefile

    r2 r17  
    33CC=wcl386
    44
    5 CFLAGS=-zq -zp=4 -bm -sg -ox -xs -xr -I.. -ID:\Projects\poppler\freetype-2.1.10\include -DOS2
     5CFLAGS=-zq -zp=4 -bm -sg -ox -xs -xr -I.. -I..\..\freetype-2.1.10\include -DOS2
    66
    77LIBS=libsplash.lib
Note: See TracChangeset for help on using the changeset viewer.