Pull to refresh
84
0
Пётр @Error1024

Разработчик

Send message
А еще в «функциях»-макросах не создать локальных переменных(про C), что приведет функцию в вид фарша.
Данная либа должна компилироваться везде, где только есть более-менее работающий C, поэтому доверить inline компилятору я не могу.
По причине того что inline лишь «рекомендует» компилятору заинлайнить функцию, кроме того это код на C89.
Кроме того, от разделения конкретно этой функции на «действия» станет только непонятнее ее работа.
Полностью согласен с автором, я начинал с BASIC, а если бы надо было ставить всякие Node js/gcc/git/..., колдовать с командной строкой, вводя магические символы, мучиться от неверных переменных окружения, и производить запуск/компиляцию с помощью кучки MAKE/bat/sh файлов, то я бы мог просто сдаться, так и не написав совой первый «Hello World!».

Про встроенные средства программирования — эх… раньше, ты включал компьютер, и он буквально приглашал тебя творить, мигая курсором во встроенном бейсике, или давая возможность его запустить всего одной командой. А сейчас — компьютер, это устройство потребления контента, даже пейнт выпилили из винды, т.к. большинство даже нарисовать рожицу в пейнте не хотят, лучше в котиков/сериалы/игры позалипать.
Безусловно, есть и бОльшие функции нежели эта, данная функция пример функции имеющей большой «когнитивный» размер — очень много надо неочевидных связей держать в голове, написать ее было сложно, читать спустя время — не менее сложно. При том что имел дело с функциями под 700 строк, но достаточно линейными, чтобы не вызывать сложностей в написании/чтении.
Я бы рад не писать таких огромных функций, с кучей сущностей, однако далеко не всегда вызов функции «бесплатен».
код
// BEGIN $RawMaskBlit(WriteByte1, WriteByte2, WriteByte3, WriteByte4)$. Do not change this line!
void ZXRawMaskBlitCopy(ZXBitmapRef bitmap, int x, int y,
                   ZXBitmapRef src, int srcX, int srcY, int srcWidth, int srcHeight, ZXData maskData)
{
    /* dest and src */
    ZXData pScan, pSrcScan, pMaskScan, pScanEnd;
    ZXData p, pSrc, pMask;
    unsigned char b, m;
    int scan, srcScan;
    /* offsets, flags, etc */
    int offset, srcOffset, endPixels;
    int fullBytes, endLine;
    int compRealOffset, realOffset;
    int isRegular;
    
    /* calculate the sizes of scan lines */
    scan = BitmapScanSize(bitmap);
    srcScan = BitmapScanSize(src);
    
    /* get pointers to a byte corresponding to a pixel */
    pScan = BitmapPixelPtr(bitmap, x, y);
    pSrcScan = BitmapPixelPtr(src, srcX, srcY);
    pMaskScan = PixelPtrData(maskData, srcScan, srcX, srcY);
    /* calculating end vertical line */
    endLine = y + srcHeight;
    
    /* bitmap offset */
    offset = x % 8;
    /* src offset */
    srcOffset = srcX % 8;
    
    /* get information about how much pixels should be shifted, */
    /* important: when (offset < srcOffset) one byte is completely absorbed when outputting the left byte */
    if(offset >= srcOffset)
        realOffset = offset - srcOffset;
    else
        realOffset = 8 - (srcOffset - offset);
    compRealOffset = 8 - realOffset;
    
    /* count of full-size bytes */
    fullBytes = CalcFullBytes(x, srcWidth);
    /* offset end pixel */
    endPixels = (x + srcWidth) % 8;
    /* regular draw or not */
    /* a) snap to right colum */
    /* b) snap to left colum */
    isRegular = (offset + srcWidth >= 8) || (offset == 0);
    
    /* main loop y */
    for(; y < endLine; y++) {
        p = pScan;
        pSrc = pSrcScan;
        pMask = pMaskScan;
        
        /* take care of left byte */
        /* xxxxxxxx XXXXXXXX xxxxxxxx */
        /* ^ we here */
        if(offset != 0) {
            if (offset >= srcOffset) {
                b = *pSrc >> realOffset;
                m = *pMask >> realOffset;
                
                /* need next byte if we haven't real offset */
                if(realOffset == 0) {
                    pSrc++;
                    pMask++;
                }
            }
            else {
                b = (*pSrc << compRealOffset) |
                (*(pSrc + 1) >> realOffset);
                m = (*pMask << compRealOffset) |
                (*(pMask + 1) >> realOffset);
                /* we completely used a byte, take a new */
                pSrc++;
                pMask++;
            }
            
            /* combine dest and src */
            if(isRegular) {
                b = (*p & rByte[offset]) | (b & lByte[offset]);/* $WriteByte1$ */
                *p = (*p & ~m) | (b & m);
            }
            else {
                b = (*p & ~(rByte[srcWidth] >> offset)) | (b & (rByte[srcWidth] >> offset));/* $WriteByte2$ */
                *p = (*p & ~m) | (b & m);
            }
            
            p++;
        }
        
        /* main loop x */
        /* xxxxxxxx XXXXXXXX xxxxxxxx */
        /*          ^ we here */
        pScanEnd = p + fullBytes;
        if(realOffset != 0) {
            for(; p < pScanEnd; p++) {
                b = (*pSrc << compRealOffset) |
                (*(pSrc + 1) >> realOffset);
                m = (*pMask << compRealOffset) |
                (*(pMask + 1) >> realOffset);
                
                /* combine dest and src */
                b = b; /* $WriteByte3$ */
                *p = (*p & (~m)) | (b & m);
                
                pSrc++;
                pMask++;
            }
        }
        else {
            for(; p < pScanEnd; p++) {
                b = *pSrc;
                m = *pMask;
                
                /* combine dest and src */
                b = b; /* $WriteByte3$ */
                *p = (*p & (~m)) | (b & m);
                
                pSrc++;
                pMask++;
            }
        }
        
        /* take care of right byte */
        /* xxxxxxxx XXXXXXXX xxxxxxxx */
        /*                   ^ we here */
        if(isRegular && endPixels) {
            if(realOffset != 0) {
                b = *pSrc << compRealOffset;
                m = *pMask << compRealOffset;
                /* .. end pixel is double byte src */
                if(endPixels > realOffset) {
                    b |= *(pSrc + 1) >> realOffset;
                    m |= *(pMask + 1) >> realOffset;
                }
            }
            else {
                b = *pSrc;
                m = *pMask;
            }
            
            /* combine dest and src */
            b = (*p & lByte[endPixels]) | (b & rByte[endPixels]);  /* $WriteByte4$ */
            *p = (*p & (~m)) | (b & m);
        }
        pScan += scan;
        pSrcScan += srcScan;
        pMaskScan += srcScan;
    }
}
// END $RawMaskBlit$. Do not change this line!

ТРИЗ еще при Сталине начали разрабатывать в СССР!

Вот это аргумент, а ещё при Сталине запретили генетику, и объявили о том что Ленин жив.
Я так понимаю на проводе поколение ЕГЭ? Ник как бэ подтверждает это.

Именно, а ещё я благодарен ЕГЭ что смог поступить в ВУЗ, находящийся в другом городе, что без ЕГЭ было бы невозможно.
Я смотрю появилась очередная разрекламированная фигня — «ТРИЗ». Для понимания которой конечно же надо пройти платные курсы.
А вот и первые отголоски ардруинозации повсеместной, промышленный девайс представляет из себя — набор шилдов.
Какой же убогий весь этот новый модный дизайн.
Вот выложу я кусочек фильма с моим лицом, а потом ваши же SONY-ковские копирасты, на мой канал на ютубе наедут.
Здесь должна быть шутка про то, что «все азиаты на одно лицо». Но ее здесь нет.
Так путь и напишут об этом, в открытом виде — «Российская сборка свободной операционной системы LINUX». А сейчас вводят людей в заблуждение, что это созданная с нуля ОС и пакет программ для нее. Это меня и бесит.
С совка еще тянется — практически вся наша «Советская» электроника/микросхемы/программы — нагло скомуниженные «аналоги» западных.
Как же вы задолбали все со своим js и вебом не к месту.
Как же у меня горит от «российского» софта для импортозамещения, в котором наше от силы — иконки, локализация, скин, пару багофич.
Ну а заказчикам это лишний повод задуматься — если у поставщика нет сертификата ФСТЭК, так ли он хорош, как рассказывает о себе?

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

Вы как бизнес-тренер отлично понимаете, что статьи на данном ресурсе делают вам имя, а для бизнес тренера имя — самое главное:)
Что-то кому-то доказывать я не буду, ибо мне от вас ничего не нужно.

Я не прошу что-либо мне доказывать, я лишь хочу понять, вы практик или нет.(я о технических проектах, и изобретениях)
Кстати, я извиняюсь за нескромный вопрос, но все же — у вас есть примеры успешных технических/рационализаторских проектов, на которые не жалко оставить здесь ссылку?
Щас ну ооочень много бизнес тренеров, людей дающих мастер классы и т.д. но не имеющих по факту не одного реального, успешного проекта, кроме этой тренинговой деятельности.

Information

Rating
5,493-rd
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity

Specialization

Application Developer, Траблшутер
From 4,000 $