GRASP | |||
---|---|---|---|
Тип | Graphics software | ||
Разработчик | John Bridges | ||
Операционная система | DOS | ||
| |||
|
ГРАСП (GRASP — GRAphical System for Presentation) — первая мультимедийная программа для семейства IBM PC и её формат данных был самым распространённым форматом анимации в своё время[1].
Первоначально Дуг Вулфграм разрабатывал FlashGun, который впервые был представлен публике как GRASP — GRAphical System for Presentation. Оригинальное программное обеспечение разрабатывали Дуг Вулфграм и Роб Невилл. Впоследствии программа была переименована в ГРАфическую Систему для Профессионалов(GRASP — GRaphic Animation System for Professionals). Многие считают это событие рождением мультимедийной индустрии.
В 1984 году Дуг Вулфграм задумал идею языка сценариев, позволяющего управлять выводом графических изображений и строить из них анимацию.
Вулфграм видел растущий спрос на мультимедийные технологии и пригласил Джона Бриджеса, совместно с которым ранее в 1982 году разрабатывался PCPaint для систем с мышью. Совместно они работали над первыми версиями ГРАСП компании Вулфграм Microtex Industries и версия 1.10c была выпущена в сентябре 1986[2].
Разработав вместе с Джоном PCPaint для редактирования изображений и шрифтов, Дуг создал затем FlashGun с использованием графической библиотеки, включающей все функции для каждой команды сценария. Первоначально использовался язык ассемблера в операциях «Fade» из FlashGun. Использование CGA-изображений создавало сложности и требовало переделки процедур библиотеки. Все процедуры хранились в архиве ZIB и были переименованы в GLIB архивации GL файлов (GRASP GL library format).
В 1987 GRASP 2.0 перестал распространяется как Shareware и стал коммерческим продуктом, издаваемым в США Пол Мейс Software. Джон Бриджес взял на себя ответственность за развитие основных функций построения Вулфграма, внешних утилит и новых команд.
В 1988 вышел GRASP 3.0, а в октябре — и GRASP 3.5 в комплекте с Pictor Paint, улучшением PCPaint. Теперь ГРАСП 3.5 «поддерживает широкий спектр видео форматов, в том числе CGA, EGA, Hercules, VGA и все популярные расширения VGA режимах до 800х600 и 1024х768 пикселей. Программное обеспечение выводит и позволяет редактировать изображения в нескольких стандартных форматах, включая PC Paintbrush (PCX) и GIF.»[3]
Отмеченный наградами аниматор Том Гатери утверждает, что с помощью ГРАСП в 1990 его ранних анимационных компьютерных программах «позволял строить динамичные сцены с детальной анимацией до такой степени, что считалось невозможным на тот момент многими программистами».[4]
В феврале 1991 был выпущен GRASP 4.0 с возможностью создания «само-исполняющихся» демо-файлов(EXE) и поддержкой AutoDesk FLI/FLC и цифрового звука PC-спикера в надежной среде программирования. Кроме того, были включены ARTOOLS и коллекция инструментов манипуляции изображениями с возможностями морфинга и управлением ключевыми моментами анимации. В том же году HRFE (High Res Flic Enhancement) был предложен в качестве дополнения для ГРАСП «позволяя ГРАСП определять, импортировать, обрабатывать и собирать анимацию, созданную в среде Autodesk Animator’s Pro».[5]
В опубликованной статье критики GRASP 4.0, авторы Стюарт Уайт и Джон Ленарчич заметили, что «язык ГРАСП предлагает творческую свободу в разработке интерактивных мультимедийных презентаций, особенно для опытных программистов художественных наклоностей».[6]
Урезанная версия GRASP 4.0 включала также копии Филиппа Шаддок в «Творения Мультимедия: практический семинар для изучения анимации и звука»[7].
В июне 1993 года был реализован Multi-Media GRASP 1.0 с поддержкой TrueColor.
Авторства и право собственности
В начале 1990 Дуг Вулфграм продал свои оставшиеся права на GRASP (и PCPaint) Джону Бриджес.
В 1994 году развитие ГРАСП остановилось, когда Джон Бриджес прервал контракт с Полом Мейсом. В 1995 году Джон создал GLPro для IMS Communications Ltd — новейшие воплощения идей Джона по GRASP с обновлением для Windows. В 2002 году Джон Бриджес создал AfterGRASP — преемника GRASP и GLPro.
// gltar.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
struct TAR { // byte offset
char name[100]; // 0
char mode[8]; // 100
char uid[8]; // 108
char gid[8]; // 116
char size[12]; // 124
char mtime[12]; // 136
char chksum[8]; // 148
char typeflag; // 156
char linkname[100]; // 157
char magic[6]; // 257
char version[2]; // 263
char uname[32]; // 265
char gname[32]; // 297
char devmajor[8]; // 329
char devminor[8]; // 337
char prefix[155]; // 345
// 500
};
typedef char CHAR;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
#pragma pack(push, 1)
typedef struct _GLHeader {
WORD DirectorySize;
struct _FileEntry {
DWORD FileOffset;
CHAR FileName[13];
} FileDirectory[1];
} GLHEADER;
#pragma pack(pop)
#define WINDOWS_TICK __int64(10000000)
#define SEC_TO_UNIX_EPOCH __int64(11644473600)
DWORD WindowsTickToUnixSeconds(unsigned __int64 windowsTicks) {
return (DWORD)((unsigned __int64)(windowsTicks / WINDOWS_TICK - SEC_TO_UNIX_EPOCH));
}
DWORD gl2tar(GLHEADER *gl, TAR *tar, unsigned long time) {
char i = 0;
DWORD chksum, j, size = 0;
while(gl->FileDirectory[i].FileName[0]) {
memset(tar, 0, sizeof(TAR));
BYTE *FilePtr = (BYTE*)((BYTE*)gl + gl->FileDirectory[i].FileOffset);
DWORD FileSize = *(DWORD*)FilePtr;
strncpy(tar->name, gl->FileDirectory[i].FileName, 13);
strcpy(tar->mode, "000644 ");
sprintf(tar->size, "%011o", FileSize);
sprintf(tar->mtime, "%011o", time);
sprintf(tar->chksum, " ");
tar->typeflag = '0';
strcpy(tar->magic, "ustar ");
for(chksum = 0, j = 0; j < 512; ++ j)
chksum += DWORD(*((BYTE*)tar + j));
sprintf(tar->chksum, "%07o", chksum);
memcpy((void*)((BYTE*)tar + 512), (void*)(BYTE*)(FilePtr + 4), FileSize);
tar = (TAR*)((BYTE*)tar + (j = ((FileSize + 512) / 512 + 1) * 512));
++ i; size += j;
}
return size + 512;
}
int main(int argc, char* argv[])
{
printf("gltar v0.00.001 -- GRASP library to TAR directory converter\r\n");
if(argc < 2) {
printf("Developed by Alikberov 2013.03.11\r\n");
printf("Usage: grtar any_file.gl\r\n");
return 0;
}
HANDLE hFile = CreateFile(argv[1], GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL);
DWORD bw;
FILETIME pLWT;
if(hFile != INVALID_HANDLE_VALUE) {
HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
if(hMap) {
GLHEADER *gl = (GLHEADER*)MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, NULL);
if(gl) {
TAR *tar = (TAR*)VirtualAlloc(NULL, 16777216, MEM_COMMIT, PAGE_READWRITE);
if(tar) {
VirtualLock(tar, 16777216);
GetFileTime(hFile, NULL, NULL, &pLWT);
bw = gl2tar(gl, tar, WindowsTickToUnixSeconds(*(unsigned __int64*)&pLWT));
CHAR szTar[4096];
strncpy(szTar, argv[1], sizeof(szTar));
strcpy(szTar + strlen(szTar) - 2, "tar");
HANDLE hTarFile = CreateFile(szTar, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, NULL, NULL);
if(hFile != INVALID_HANDLE_VALUE) {
WriteFile(hTarFile, tar, bw, &bw, NULL);
CloseHandle(hTarFile);
argc = 0;
} else {
printf("Error: CreateFile(\"%s\"...\r\n", argv[1]);
argc = 5;
}
VirtualUnlock((void*)tar, 16777216);
VirtualFree((void*)tar, 0, MEM_RELEASE);
} else {
printf("Error: VirtualAlloc\r\n");
argc = 4;
}
} else {
printf("Error: MapViewOfFile\r\n");
argc = 3;
}
UnmapViewOfFile(gl);
CloseHandle(hMap);
} else {
printf("Error: CreateFileMapping\r\n");
argc = 2;
}
CloseHandle(hFile);
} else {
printf("Error: Bad path %s\r\n", argv[1]);
argc = 1;
}
return argc;
}
К сожалению, найти большой архив GRASP-анимации достаточно сложно. Хотя, вот некоторые ссылки:
На эту статью не ссылаются другие статьи Википедии. |