Обновить
49

Погромист

15
Подписчики
Отправить сообщение
У вас таки тоже есть свой add-gtkmozembed-oldstyle.patch? ;-)
Вебкит хорош в составе Qt и где есть такая возможность — так и делаю. Например на соседнем проекте вполне себе встроенный WebKit в Qt 4.8 в полный рост.

Однако ж в свете околонокиевых событий я бы не рискнул закладываться на регулярные апдейты ;-)

И кстати мне нужен не отладчик, а работа молча, я не зря упомянул prompt service.
Пока было можно — использовали 3.6. Но уже давно не — требуется пачка новейших features. Причем в самых безумных сочетаниях. Например — flash вместе с scale / rotate transform.

Хабраюзер strizh также обратил мое внимание на mac-only FileUtils::FileURLToPosixPath, так что код превращается в

    IDFile outputFile;
    InterfacePtr<IFileStreamData> fileData(stream, IID_IFILESTREAMDATA);
    outputFile = fileData->GetSysFile();

#ifdef WINDOWS
    SDKFileHelper fh(outputFile);
    PMString pathID = fh.GetPath();
    WideString pathWID(pathID);
    std::string xfinal;
    StringUtils::ConvertWideStringToUTF8 (pathWID, xfinal);
#endif
#ifdef MACINTOSH			
    PMString pathJ = FileUtils::SysFileToFileURL(outputFile);
    WideString pathWJ(pathJ);
    std::string xj;
    StringUtils::ConvertWideStringToUTF8 (pathWJ, xj);
    std::string xfinal = FileUtils::FileURLToPosixPath(xj);
#endif

что несколько короче.
Как выяснилось — можно и без, спасибо коллективному разуму и хабраюзеру notorca за наводку.
Мертвенькое и синенькое уже, куда там развивают. Чую — будет мне новый побочный проект скоро ;-)
Я был в полушаге. Логично — если у меня уже есть URL… ;-) Подвела косность мышления — я пытался путь в путь преобразовать, а получив URL — решил что и так сойдет, URL то везде conform.

Так что в итоге вот что должно было получиться:

void FooExpFilter::ExportToStream(
	IPMStream* stream, IDocument* doc, IPMUnknown* targetboss, 
	const PMString& formatName, UIFlags uiFlags)
{
	IDFile outputFile;
	InterfacePtr<IFileStreamData> fileData(stream, IID_IFILESTREAMDATA);
	outputFile = fileData->GetSysFile();

#ifdef WINDOWS
	SDKFileHelper fh(outputFile);
	PMString pathID = fh.GetPath();
#endif
#ifdef MACINTOSH			
	FSSpec fsSpec;
	PMString pathID;
	OSErr err = FileUtils::IDFileToFSSpec(outputFile, fsSpec);
	if (err == noErr) {
		FSRef fsRef;
		err = MacFileUtils::FSSpecToFSRef(fsSpec, fsRef);
		if (err == noErr) {
			CFURLRef appURL = ::CFURLCreateFromFSRef(NULL, &fsRef);
			CFStringRef app_str = ::CFURLCopyFileSystemPath(appURL, kCFURLPOSIXPathStyle);
			if (app_str) {
				pathID.SetCFString(app_str);
				::CFRelease(app_str);
			}
			if (appURL) ::CFRelease(appURL);
		}
	}
#endif
	WideString pathWID(pathID);
	std::string xID;
	StringUtils::ConvertWideStringToUTF8 (pathWID, xID);

Клиент прислал лог чтобы не соврать — со Snow Leopard.

А вообще насчет «выпилен» это сильно — эвон photoshop SDK откроешь — чего только в примерах не увидишь, и это все еще и компилируется под 32 бита (под 64 — уже нет, хотя FSIO к примеру — в полный рост есть и тут).

Так что — еще встречается.
Про мак будет в следующей.
О да, я еще помню парад апдейтов, когда в libz вдруг vulnerability нашли. Лучше б экономили память ;-)
Так это замена не goto, и не замена пачке if.

Я ж специально более понятный пример привел — это имитация try/catch в том случае, когда не допускается использование родного.

Например — когда собирается проект с флажками -fno-exceptions -fno-rtti. Или у микрософта — без флажка -EHsc. Или нижележащий фреймворк принципиально не знает про throw.

Поймите правильно — я совершенно не в восторге от такого трюкачества. Но — приходится.
SVG диаграммы в документы вставлять в одном автоматизированном решении. Это было проще, чем конвертировать в растр и потом сражаться с непопаданием в pantones. «А у вас наш шестикомпонентный цвет на печати выглядит как россыпь точек — вы не попали в заданный CMYK color set!»

Поэтому взяли Apache Batik и дали ему нарисовать картинку на IGraphicsPort.

[irony]Так что уменьшили энтропию, сотня бангалорских индусов больше не выравнивает тысячи диаграмм в фотошопе каждый квартал.[/irony]

К слову, когда решали обратную задачу (нарезали InDesign документы в стопку одностраничных SVG) — использовали тот же подход в виде Apache PDFBox ;-)
Поддержка OpenType font collections. Наконец-то.
Стандартный трюк по оборачиванию лестницы условий, по-моему даже свое название имеет. В Adobe SDK все примеры так обернуты, мы решили по стилю не выделяться.

Впрочем, еще можно встретить вот такое

__try {
    if(foo) __leave;
}
__except(...) {

}


В MS DDK встречается в примерах.
Там dlopen() сюрпризов не преподнес.

Вообще, в деле запуска Java, для мака разницы немного, основных отличий — вот они

#ifdef WINDOWS
	#define CORRECT_JNI_VER JNI_VERSION_1_6
#else //MACINTOSH
	#define CORRECT_JNI_VER JNI_VERSION_1_4
#endif

и вот это
		JavaVMInitArgs vm_args;
		vm_args.version = CORRECT_JNI_VER;
		JavaVMOption* options = new JavaVMOption[vmParamCount];

		options[0].optionString = memoryOpt; // -Xmx...
		options[1].optionString = classpath;
#ifdef MACINTOSH
		options[2].optionString = "-Djava.awt.headless=true";
		options[3].optionString = "-XstartOnFirstThread";
#endif

Я иногда делаю так

static int inSigSegvHandler = 0;
static void sigsegvHandler(int sig) {
    ++inSigSegvHandler;
    if(inSigSegvHandler > 1) { // защита от двойного попадания, сигнал ставлю sigaction + SA_RESTART
        fprintf(stderr, "*** SIG %d TWICE ***\n", sig);
        _exit(2);
    }

    invokeDebuggerToSelf();
    _exit(1);
}


Где функция

void invokeDebuggerToSelf() {
    int pid = getpid();
    char link[MAX_PATH];
    char buf[MAX_PATH]; 
    char bufexe[MAX_PATH]; 
    char pidbuf[16];
    char cmdline[MAX_PATH]; 

    memset(bufexe, 0, sizeof(bufexe));
    memset(link, 0, sizeof(link));
    sprintf(link, "/proc/%d/exe", pid);
    if(readlink(link, bufexe, MAX_PATH) <=0)
        strcpy(bufexe, "где-там-оно-лежит"); // вдруг звезды сойдутся неудачно

    sprintf(pidbuf, "%d", pid);

    int wpid;
    if((wpid=fork()) == 0) {
        execlp("gdb", "gdb", "-batch", "-q", "-x", gdbFile, bufexe, pidbuf, NULL);
    }
    else if(wpid > 0) {
        int status;
	waitpid(wpid, &status, WUNTRACED);
	_exit(0);
    }
}


Этот код я честно слямзил не помню где много лет назад, ну и обрезал по максимуму под свои нужды.

В демоне — очень даже помогает, тут и деманглинг и прочее, и 3rd party код показывает с именами и номерами строк. cmdFile содержит список нужных мне команд, в общем случае там bt + quit.

Главное — strip не увлекаться ;-)
Про doom — все уже украдено до нас — есть DEngine.net и High-Res Texture Pack, рекомендую. Там же поддерживается heretic / Hexen.
(скачивает старый wolfenstein 3d, скачивает опенсорц движок, собирает, запускает, матерится, читает ридми, подбирает константы)

— Spien!!!

;-)

А вообще я насчитал 31 игру, в которые я успел плотно поиграть и пройти. Многие — не по одному разу. Из них вот эти — есть и сейчас и я них периодически отрываюсь

Blood — в dosemu
Doom — dengine.net, обновленные текстуры взяты там же
Duke — Eduke32
Quake I — darkplaces
JK StarWars — Wine (не только Dark Force но и с Кайлом Катарном и Джереком)
UFO — dosemu
Wolfenstein — Linux port

это не считая тетриса и вторых героев в телефоне.
Что-то я не вижу у вас стандартных танцев с бубном вокруг сертификатов, самоподписей, тест мода и прочих чудес. Вы на 64битах на чем запускали?

Информация

В рейтинге
Не участвует
Откуда
München, Bayern, Германия
Дата рождения
Зарегистрирован
Активность