Проблема сборки PAPyRUS под OpenBSD 6.2

  • olegus 15.10.2023
    Эх, удачи вам.
  • AkhmedSatajaAkhmedSataja 15.10.2023
    Спасибо.
  • olegus 17.10.2023
    Приветствую. Так и не проверили работоспособность на ОС 90-х годов или нет? Так как боюсь что с этими ошибками проблема кроется в современности ОС.
  • AkhmedSatajaAkhmedSataja 17.10.2023
    Нет еще. На Bochs пытался поставить - не вышло, тормоза такие, будто я не pentium в параметрах указал и 512 метров оперативы, а 386-й и 64 МБ. Но надо будет попробовать, скорее всего, на релаьном железе.
  • AkhmedSatajaAkhmedSataja 17.10.2023
    Я вот чего не могу понять - в плюсах разрешено подобное преобразование:
    char* bla=(void*)func("ddd");
    то есть, void * в char*, или в int и обратно? Просто у него так много где. Целый класс styleItem с функцией get_attr.

    void *
    StyleItem::get_attr(StyleAttrType t) {
    
      switch( t ) {
      case STYLE_NAME:
        return (void *)_name;
        break;
    
      case STYLE_ALIGNMENT:
        return (void *)_alignment;
        break;
        
      case STYLE_FLINE_MARGIN:
        return (void *)_fline;
        break;
    
      case STYLE_BOTTOM_MARGIN:
        return (void *)get_bmargin();
        break;
    
      case STYLE_TOP_MARGIN:
        return (void *)get_tmargin();
        break;
    
      case STYLE_LEFT_MARGIN:
        return (void *)get_lmargin();
        break;
    
      case STYLE_RIGHT_MARGIN:
        return (void *)get_rmargin();
        break;
    
      case STYLE_TAG:
        return (void *)_tag;
        break;
    
      case STYLE_NEXT_STYLE:
        return (void *)((_nstyle==NULL) ? "Normal" : _nstyle);
        return (char *)_nstyle;
        break;
    
      case STYLE_FONT:
        return (void *)_font;
        break;
    
      default:
        fprintf(stderr,
    	    "StyleItem::get_attr: StyleAttrType %d not allowed\n", (int)t);
      }
      return NULL;
    }
  • olegus 17.10.2023
    Вот из-за этих преобразований я ненавижу C'ишные, после преобразований не поймёшь что это. Но так можно делать.
  • AkhmedSatajaAkhmedSataja 20.10.2023
    Вобщем, с помощью gdb, я понял (в двадцатый раз! мда уж), что проблема здесь:

    styleItem.c:
    case STYLE_BOTTOM_MARGIN:
        set_bmargin((unsigned int)value);
        break;

    И здесь:

    margin.h:
    inline void set_bmargin(unsigned short m)  { bmargin = UNZOOM(m); }

    gdb мне выдал следующее:

    Program received signal SIGSEGV, Segmentation fault.
    0x17b7ba85 in StyleItem::set_attr (this=0x85ca4b00, t=STYLE_BOTTOM_MARGIN, 
        value=0x0) at margin.h:53
    53        inline void set_bmargin(unsigned short m)  { bmargin = UNZOOM(m); }
    (gdb) q
    The program is running.  Exit anyway? (y or n) y

    И продолжил выдавать даже когда я заменил первый код на:
    case STYLE_BOTTOM_MARGIN:
        set_bmargin((*(unsigned short*)value));
        break;

    reinterpret_cast и static_cast тоже использовал в самых извращенных работах, нулевой результат.

    UNZOOM(m) это define:

    globals.h [48 строка]:
    #define ZOOM(size) ((int)((size)*zoom))
    #define UNZOOM(size) ((int)((size)/zoom))

    Словом, странно все это.
  • olegus 20.10.2023
    inline void set_bmargin(unsigned short m)

    А что за переменная m? У меня у самого вчера взрыв мозга был(функция возвращала не True, а адрес ячейки памяти, но виноваты были скобки)))

    case STYLE_BOTTOM_MARGIN:
    set_bmargin((*(unsigned short*)value));
    break;

    А это ничего не должно возвращать?
    Т.к. t=STYLE_BOTTOM_MARGIN
    Я вчера с подобным работал.
  • AkhmedSatajaAkhmedSataja 20.10.2023
    Да вроде, функция set_attr(..) и не должно ничего возвращать:

    void
    StyleItem::set_attr(StyleAttrType t, void *value) {
    
    printf("....set_attr:  start\n");
    
      switch( t ) {
    
      case STYLE_NAME:
        if( _name != NULL )
          delete _name;
        _name = strdup((char *)value);
        break;
    
      case STYLE_ALIGNMENT:
        _alignment = reinterpret_cast<StyleAlignType &>(value);
        break;
        
      case STYLE_FLINE_MARGIN:
        _fline = (*(unsigned int*)value);
        break;
    
      case STYLE_BOTTOM_MARGIN:
        set_bmargin((*(unsigned short*)value));
        break;
    
      case STYLE_TOP_MARGIN:
        set_tmargin((unsigned int)value);
        break;
    
      case STYLE_LEFT_MARGIN:
        set_lmargin((unsigned int)value);
        break;
    
      case STYLE_RIGHT_MARGIN:
        set_rmargin((unsigned int)value);
        break;
    
      case STYLE_TAG:
      printf("....set_attr[tag]: started\n");
      printf("....set_attr[tag]: started!\n");
      _tag = *static_cast<int*>(value);
      printf("....set_attr:  _tag=%d\n",_tag);
        break;
    
      case STYLE_NEXT_STYLE:
        if( _nstyle != NULL )
          delete _nstyle;
        _nstyle = strdup((char *)value);
        break;
    
      case STYLE_FONT:
        _font = (FontItem *)value;
        break;
    
      default:
        fprintf(stderr,
    	    "StyleItem::set_attr: StyleAttrType %d not allowed\n", (int)t);
      };
    }

    Что такое m мне известно - она же декларирована в самой функции set_bmargin(..);:

    inline void set_bmargin(unsigned short m)  { bmargin = UNZOOM(m); }

    Там вообще данные передаются, похоже, так:

    void*->unsigned short->?

    там идет приравнивание в оригинале unsigned short и int?
    UNZOOM же равен (int)((size)/zoom)
    Но, даже если я делаю преобразование, причем неважно как, то все равно PAPyRUS выпадает с SIGSEGV, Segmentation fault.
  • AkhmedSatajaAkhmedSataja 20.10.2023
    Очередное полотно от отладчика:

    Breakpoint 1, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:181
    181         printf("........add_style: 0.9\n");
    (gdb) c
    Continuing.
    ........add_style: 0.9
    
    Breakpoint 4, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:182
    182         s->set_attr(STYLE_TOP_MARGIN, (void *)j);
    (gdb) c
    Continuing.
    ....set_attr:  start
    
    Breakpoint 5, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:183
    183         s->set_attr(STYLE_BOTTOM_MARGIN, (void *)j);
    (gdb) c
    Continuing.
    ....set_attr:  start
    0x0
    0
    
    Breakpoint 6, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:184
    184         s->set_attr(STYLE_LEFT_MARGIN, (void *)j);
    (gdb) c
    Continuing.
    ....set_attr:  start
    
    Breakpoint 7, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:185
    185         s->set_attr(STYLE_RIGHT_MARGIN, (void *)j);
    (gdb) c
    Continuing.
    ....set_attr:  start
    
    Breakpoint 8, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:186
    186         printf("........add_style: 0.10\n");
    (gdb) c
    Continuing.
    Breakpoint 1, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:181
    181         printf("........add_style: 0.9\n");
    (gdb) c
    Continuing.
    ........add_style: 0.9
    
    Breakpoint 4, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:182
    182         s->set_attr(STYLE_TOP_MARGIN, (void *)j);
    (gdb) c
    Continuing.
    ....set_attr:  start
    
    Breakpoint 5, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:183
    183         s->set_attr(STYLE_BOTTOM_MARGIN, (void *)j);
    (gdb) c
    Continuing.
    ....set_attr:  start
    0x0
    0
    
    Breakpoint 6, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:184
    184         s->set_attr(STYLE_LEFT_MARGIN, (void *)j);
    (gdb) c
    Continuing.
    ....set_attr:  start
    
    Breakpoint 7, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:185
    185         s->set_attr(STYLE_RIGHT_MARGIN, (void *)j);
    (gdb) c
    Continuing.
    ....set_attr:  start
    
    Breakpoint 8, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:186
    186         printf("........add_style: 0.10\n");
    (gdb) c
    Continuing.
    ........add_style: 0.10
    
    Breakpoint 9, StyleManager::add_style (this=0x8091473c, n=0x83929b78 "Normal", 
        b=0x0) at kernel/StyleManager/styleManager.cc:187
    187         s->set_attr(STYLE_ALIGNMENT, (void *)STYLE_ALIGN_LEFT);
    (gdb) c
    Continuing.
    ....set_attr:  start
    
    Breakpoint 10, StyleManager::add_style (this=0x8091473c, 
        n=0x83929b78 "Normal", b=0x0) at kernel/StyleManager/styleManager.cc:188
    188         s->set_attr(STYLE_FLINE_MARGIN, (void *)j);
    (gdb) c
    Continuing.
    ....set_attr:  start
    
    Program received signal SIGSEGV, Segmentation fault.
    0x17b8fc13 in StyleItem::set_attr (this=0x7af7b1c0, t=STYLE_FLINE_MARGIN, 
        value=0x0) at kernel/StyleManager/styleItem.cc:197
    197         _fline = (*(unsigned int*)value);
    (gdb) q