/*-- AutoRev header do NOT edit!
*
*   Program         :   Help.c
*   Copyright       :   Copyright © 1991-92 Jaba Development
*   Author          :   Jan van den Baard
*   Creation Date   :   05-Apr-92
*   Current version :   2.0
*   Translator      :   Dice v2.06.40
*
*   REVISION HISTORY
*
*   Date          Version         Comment
*   ---------     -------         ------------------------------------------
*   05-Apr-92     2.0             Help pages. (rewrite)
*
*-- REV_END --*/

#include "View.h"

Prototype long WaitForKey( long );
Prototype void Help( void );

extern struct MsgPort           *vwIdPort;
extern struct RastPort          *vwRPort;
extern ULONG                     vwClass;
extern UWORD                     vwCode, vwQualifier, vwMaxLin;

UBYTE           *Header = " \033[0;1m" CX_NAME " version " CX_VERSION " © 1991-92 Jaba Development\n"\
                          "     \033[0;33mWritten with DICE C by Jan van den Baard\033[0m\n\n";

#ifdef __DETACH
#define NUMHELP 27
#else
#define NUMHELP 28
#endif

UBYTE   *HelpText[] = {
    " \033[32mSpace\033[0m,\033[32mPg Dn \033[33m \033[0m          : Page down (MORE).\n",
    " \033[32mBackspace\033[0m,\033[32mPg Up\033[0m        : Page up (LESS).\n",
    " \033[32mReturn\033[0m,\033[32mDn\033[0m,\033[32mNk Dn\033[0m        : Next line.\n",
    " \033[32mEnter\033[0m,\033[32mUp\033[0m,\033[32mNk Up\033[0m         : Previous line.\n",
    " \033[32m<\033[0m,\033[32mNk Left\033[0m/\033[32m>\033[0m,\033[32mNk Right\033[0m   : First/Last page (TOP/BOTTOM).\n",
    " \033[32m/\033[0m,\033[32mF\033[0m                    : Find first (case sensitive).\n",
    " \033[32mN\033[0m/\033[32mP\033[0m                    : Find next/previous (case sensitive).\n",
    " \033[32m.\033[0m,\033[32mS\033[0m                    : Find first (case insensitive).\n",
    " \033[32mCTRL+N\033[0m/\033[32mCTRL+P\033[0m          : Find next/previous (case insensitive).\n",
    " \033[32mCTRL+L\033[0m,\033[32mR\033[0m               : Refresh display.\n",
    " \033[32m%\033[0m                      : Goto N%.\n",
#ifndef __DETACH
    " \033[32mE\033[0m                      : Edit with ENV:EDITOR (Only Shell !).\n",
#endif
    " \033[32mL\033[0m                      : Load a new file.\n",
    " \033[32mJ\033[0m                      : Jump to last found string.\n",
    " \033[32mB\033[0m                      : Goto sleep (loose text).\n",
    " \033[32mCTRL+B\033[0m                 : Goto sleep (remember text).\n",
    " \033[32mLSHIFT+CTRL+D\033[0m/\033[32m+P\033[0m       : Dump page/file to printer.\n",
    " \033[32mH\033[0m,\033[32mHELP\033[0m                 : Help page(s).\n",
    " \033[32mQ\033[0m,\033[32mCTRL+C\033[0m,\033[32mESC\033[0m,\033[32mNk 5\033[0m      : Quit view\n",
    " \033[0;32mFn\033[0m                     : Mark text block #\033[32mn\033[0m.\n",
    " \033[32mSHIFT+Fn\033[0m               : Unmark text block #\033[32mn\033[0m.\n",
    " \033[32mCTRL+Fn\033[0m                : Jump to text block #\033[32mn\033[0m.\n",
    " \033[32mLSHIFT+CTRL+Fn\033[0m         : Print text block #\033[32mn\033[0m.\n",
    " \033[32mLALT+Fn\033[0m                : Save text block #\033[32mn\033[0m.\n",
    " \033[32mCTRL+S\033[0m                 : Save whole text.\n",
    " \033[32mM\033[0m                      : Toggle mouse-pointer.\n",
    " \033[32mC\033[0m                      : Toggle scroll mode.\n",
    " \033[32mSHIFT+N\033[0m                : Goto line #\033[32mn\033[0m.\n"  };

long WaitForKey( long onlyesc )
{
    long ret = FALSE;

    while( 1 ) {
        WaitPort( vwIdPort );
        while( ReadMsgPort( vwIdPort )) {
            if ( vwClass == IDCMP_RAWKEY ) {
                if ((( vwCode & IECODE_UP_PREFIX ) != IECODE_UP_PREFIX ) && ( ! ( vwQualifier & IEQUALIFIER_REPEAT )))  {
                    if ( onlyesc ) {
                        if ( vwCode == 0x45    )
                            goto breakLoop;
                    } else if ( vwCode == 0x45 ) {
                        ret = TRUE;
                        goto breakLoop;
                    } else
                        goto breakLoop;
                }
            }
        }
    }

    breakLoop:

    ClearMsgPort( vwIdPort );
    return( ret );
}

void Help( void )
{
    UWORD       i, cnt = 0;

    while( 1 ) {

        Move( vwRPort, 0, 0 );
        SetAPen( vwRPort, 0 );
        SetDrMd( vwRPort, JAM1 );
        ClearScreen( vwRPort );

        MoveTo( 1,1 );
        Inform( Header );

        for( i = 0; i < vwMaxLin - 6; i++ ) {
            Inform( HelpText[ cnt++ ] );
            if ( cnt == NUMHELP ) break;
        }

        if ( cnt != NUMHELP ) {
            Inform( "\n    \033[0;1mPRESS A KEY FOR MORE (ESC TO CONTINUE)" );
            if ( WaitForKey( FALSE ))
                goto breakIt;
        } else {
            Inform( "\n    \033[0;1mPRESS ESC TO CONTINUE" );
            WaitForKey( TRUE );
            goto breakIt;
        }
    }

    breakIt:

    Move( vwRPort, 0, 0 );
    SetAPen( vwRPort, 0 );
    SetDrMd( vwRPort, JAM1 );
    ClearScreen( vwRPort );
    DisplayText();
    InfoLine();
}
