Esempio n. 1
0
// Lua: res = help( [topic] )
static int elua_help( lua_State *L )
{
  const char *topic = NULL;

  if( lua_type( L, 1 ) == LUA_TSTRING )
    topic = luaL_checkstring( L, 1 );
  help_init( HELP_FILE_NAME ); 
  term_set_mode( TERM_MODE_COLS );
  term_enable_paging( TERM_PAGING_ON );
  help_help( topic );
  term_set_mode( TERM_MODE_ASCII );
  term_enable_paging( TERM_PAGING_OFF );
  help_close();
  return 0;
}
Esempio n. 2
0
static int do_showhelp( char **helptopic, char *filename, EVENT (*rtn)( EVENT ), bool first )
{
    int         err;
    char        *ptr;
    unsigned    len;
    char        *htopic;

    eventMapFn = rtn;
    helpTab = NULL;
    helpCur = helpTab;
    strcpy( curFile, filename );
    helpInBuf = HelpMemAlloc( BUF_LEN );
    if( helpInBuf == NULL ) {
        HelpMemFree( helpStack );
        return( HELP_NO_MEM );
    }
    helpOutBuf = HelpMemAlloc( BUF_LEN );
    if( helpOutBuf == NULL ) {
        HelpMemFree( helpStack );
        return( HELP_NO_MEM );
    }
    // don't fix hyperlink topics
    if( *helptopic != NULL && first ) {
        htopic = fixHelpTopic( *helptopic );
    } else if( *helptopic == NULL ) {
        len = 1;
        htopic = HelpMemAlloc( len );
        htopic[0] = '\0';
    } else {
        len = strlen( *helptopic );
        htopic = HelpMemAlloc( len + 1 );
        strcpy( htopic, *helptopic );
    }
    nexttopic( htopic );
    for( ;; ) {
        err = findhelp( &tabFilter );
        if( err != HELP_OK )
            break;
        if( curEvent == EV_ESCAPE )
            break;
        if( curEvent == EV_KILL_UI ) {
            break;
        }
    }
    SearchDlgFini();
    help_close();
    // This is Not Nice - we're freeing memory that
    // someone else allocated! Just don't do it.
    if( err != HELP_NO_SUBJECT ) {
        if( *helptopic != NULL ) {
            HelpMemFree( *helptopic );
            *helptopic = NULL;
        }
        *filename = '\0';
    }
    HelpMemFree( helpInBuf );
    HelpMemFree( helpOutBuf );
    HelpMemFree( htopic );
    if( helpTab != NULL && helpCur->key2_len != 0 ) { // cross file link
        len = helpCur->key1_len;
        *helptopic = ptr = HelpMemAlloc( len + 1 );
        strncpy( ptr, helpCur->keyword, len );
        ptr[len] = '\0';
        ptr = helpCur->keyword + len;
        len = helpCur->key2_len;
        strncpy( filename, ptr, len );
        filename[len] = '\0';
        if( helpCur != tabFilter.curr ) { // backwards through cross file link
            prevtopic();
        }
    } else {
        Free_Stack();
    }
    free_fields( &helpTab );
    return( err );
}