Проблема сборки PAPyRUS под OpenBSD 6.2
-
Методом тыка удалось выяснить, что при загрузке скрипта "papyrus-inti.tcl" ошибка возникает при попытке загрузить "papyrus-menus.tcl".
-
Далеко не факт, что возня с плюсами закончилась - скрипт спотыкается на функции AddStyle и тут либо оная в commandsAM.cc не работает правильно, либо со шрифтами проблема, вот только в xlsfonts есть прописанные там шрифты, так что не факт.
-
Написать свой редактор с нуля, да еще на Motif - не потяну, мне мозгов не хватит, к тому же, есть XEmacs и emacs. А тут лучше попытаться исправить старый. Насчет форматов, как гласит READMY.english, там не густо:
- save formats (ASCII, PostScript, Specific PAPyRUS
Не знаю, получится ли потом добавить хоть один, да и имеет ли это смысл.
Кстати, не подскажите, а вот это нормально? Он сыпется как раз на данной функции, написанной в файле tclGet.cc, в "int Tcl_GetFont(Tcl_Interp *interp, char *string, FontItem *&fiPtr) {":free((char *)argsPtr);
Велика вероятность, блин, я уже боюсь этих слов, что именно это вызывает ошибку bogus pointer, а в тот раз, когда я указал другой путь, я просто ошибся в его написании, и PAPyRUS не нашел скриптов, ему не с чего было загружать шрифты, и он просто не зайдействовал данную функцию? -
Что-то меня здесь смущает:
int Tcl_GetFont(Tcl_Interp *interp, char *string, FontItem *&fiPtr) { char **argsPtr; int numArgs, size; FontStyle style; if( Tcl_SplitList(interp, string, &numArgs, &argsPtr) != TCL_OK ) return TCL_ERROR; if( numArgs != 3 ) { Tcl_AppendResult(interp, "Error: bad font format "", string, "": must be { family style size }", (char *)NULL); return TCL_ERROR; } if( Tcl_GetFontStyle(interp, argsPtr[1], style) != TCL_OK ) return TCL_ERROR; if( Tcl_GetInt(interp, argsPtr[2], &size) != TCL_OK ) return TCL_ERROR; fiPtr = papyrus->get_font(argsPtr[0], style, size); if( fiPtr == NULL ) { char str[64]; sprintf(str, "Error: font "%s-%s-%d" doesn't exit\n", argsPtr[0], FontStyle_to_String(style), size); Tcl_AppendResult(interp, str, (char *)NULL); return TCL_ERROR; } free((char *)argsPtr); return TCL_OK; }
То есть, Карлос создал char **argsPtr, [то есть, хм, двойной указатель типа char?] затем преобразовал его в char*, и это преобразованное очистил?
И так у него, как минимум, в следующих функциях:int Tcl_GetMargins(Tcl_Interp *interp, char *string, int intPtr[]) ; int Tcl_GetFont(Tcl_Interp *interp, char *string, FontItem *&fiPtr);
-
olegus:Оно того стоит?
В этом деле некромантии главное успеть до конца отпуска. -
AkhmedSataja:Что-то меня здесь смущает:
int Tcl_GetFont(Tcl_Interp *interp, char *string, FontItem *&fiPtr) { char **argsPtr; int numArgs, size; FontStyle style; if( Tcl_SplitList(interp, string, &numArgs, &argsPtr) != TCL_OK ) return TCL_ERROR; if( numArgs != 3 ) { Tcl_AppendResult(interp, "Error: bad font format "", string, "": must be { family style size }", (char *)NULL); return TCL_ERROR; } if( Tcl_GetFontStyle(interp, argsPtr[1], style) != TCL_OK ) return TCL_ERROR; if( Tcl_GetInt(interp, argsPtr[2], &size) != TCL_OK ) return TCL_ERROR; fiPtr = papyrus->get_font(argsPtr[0], style, size); if( fiPtr == NULL ) { char str[64]; sprintf(str, "Error: font "%s-%s-%d" doesn't exit\n", argsPtr[0], FontStyle_to_String(style), size); Tcl_AppendResult(interp, str, (char *)NULL); return TCL_ERROR; } free((char *)argsPtr); return TCL_OK; }
То есть, Карлос создал char **argsPtr, [то есть, хм, двойной указатель типа char?] затем преобразовал его в char*, и это преобразованное очистил?
И так у него, как минимум, в следующих функциях:int Tcl_GetMargins(Tcl_Interp *interp, char *string, int intPtr[]) ; int Tcl_GetFont(Tcl_Interp *interp, char *string, FontItem *&fiPtr);
Да, двойной указатель char.
FontStyle style. Хм. А есть класс который отвечает за FontStyle? -
Перечисление есть, в файле /kernel/FontManager/fontFamily.h:
typedef enum {NORMAL, BOLD, ITALIC, BOLD_ITALIC} FontStyle;