#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

#define PACKET_HEADER 0x7D
#define PACKET_FOOTER 0xD7

uint16_t calculateCRC(uint8_t *data, int length) {
    // Implement CRC-16/XMODEM calculation here
    uint16_t crc = 0x0000;
    for (int i = 0; i < length; i++) {
        crc ^= (uint16_t)data[i] << 8;
        for (int j = 0; j < 8; j++) {
            if (crc & 0x8000) {
                crc = (crc << 1) ^ 0x1021; // CRC-16/XMODEM polynomial
            } else {
                crc <<= 1;
            }
        }
    }
    return crc;
}

void eraseImageData() {
    system("clear");
}

// Function to save a chunk of image data in memory
void saveImageData(uint8_t *imageDataChunk, uint16_t imageDataChunkLength) {
    for (int i = 0; i < imageDataChunkLength; i++) {
        printf("%c", imageDataChunk[i]);
    }
}

void imageReceiver(uint8_t *receivedBytes) {
    // Check the header and footer
    if (receivedBytes[0] != PACKET_HEADER || receivedBytes[receivedBytes[1] + 4] != PACKET_FOOTER) {
        eraseImageData();
        return; // Invalid packet, erase image data and ignore
    }

    // Extract packet information
    uint16_t packetLength = receivedBytes[1];
    uint16_t packetNumber = (receivedBytes[2] << 8) | receivedBytes[3];
    uint16_t totalImageSize = (receivedBytes[4] << 8) | receivedBytes[5];

    // Calculate CRC-16/XMODEM checksum
    uint16_t receivedCRC = (receivedBytes[packetLength - 2] << 8) | receivedBytes[packetLength - 1];
    uint16_t calculatedCRC = calculateCRC(receivedBytes, packetLength - 2);

    // Validate the packet
    if (packetLength < 10 || packetLength > 255 || receivedCRC != calculatedCRC || packetNumber < 1 || packetNumber * (packetLength - 9) > totalImageSize) {
        eraseImageData();
        return; // Invalid packet, erase image data and ignore
    }

    // Save the image data
    saveImageData(receivedBytes + 6, packetLength - 9);
}



int main() {
   
    printf("Toy Projector Firmware v1.0 is running ");
    
    
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x01, 0x03, 0xB3, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4F, 0x02, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x02, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x28, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x03, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x9F, 0xD3, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x04, 0x03, 0xB3, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x2D, 0x2D, 0x2D, 0x22, 0x22, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0xE0, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x05, 0x03, 0xB3, 0x20, 0x22, 0x22, 0x22, 0x2D, 0x2D, 0x2D, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xC2, 0x3A, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x28, 0x00, 0x06, 0x03, 0xB3, 0x20, 0x0A, 0x3A, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x2E, 0x2D, 0x27, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0x20, 0x20, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x83, 0x45, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x28, 0x00, 0x07, 0xB3, 0xB3, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x20, 0x20, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x20, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x48, 0xA7, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x28, 0x00, 0x08, 0x03, 0xB3, 0x5F, 0x20, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0x20, 0x0C, 0x95, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x28, 0x00, 0x09, 0x03, 0xB3, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x3A, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x42, 0x3A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x82, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x32, 0x00, 0x0A, 0x03, 0xB3, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x4C, 0x69, 0x74, 0x74, 0x6C, 0x65, 0x20, 0x45, 0x72, 0x72, 0x6F, 0x72, 0x3A, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x3A, 0x5F, 0x5F, 0xEA, 0x1D, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x32, 0x00, 0x0B, 0x03, 0xB3, 0x5F, 0x5F, 0x5F, 0x5F, 0x42, 0x3A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1C, 0xD9, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x3C, 0x00, 0x0C, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x3A, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x42, 0x3A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x50, 0x6F, 0x77, 0x65, 0x72, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x40, 0x78, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x3C, 0x00, 0x0D, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x66, 0x6F, 0x75, 0x6E, 0x64, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x83, 0xEE, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x0D, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x3A, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x3A, 0x20, 0xDB, 0x73, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x0F, 0x03, 0xB3, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0xC8, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1F, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDB, 0xB5, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x11, 0x03, 0xB3, 0x20, 0x0A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x3D, 0x3D, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x5B, 0xBD, 0xD7});
    imageReceiver((uint8_t[]){0xDD, 0x1E, 0x00, 0x12, 0x03, 0xB3, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0x20, 0x7C, 0x20, 0xED, 0xFC, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x13, 0xB3, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x8A, 0xE0, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x14, 0x03, 0xB3, 0x4F, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0x20, 0x20, 0x27, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0xF0, 0xA5, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x15, 0x03, 0xB3, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x27, 0x20, 0x20, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xC1, 0xEB, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x16, 0x03, 0xB3, 0x20, 0x20, 0x0A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0xEA, 0x68, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x17, 0x03, 0xB3, 0x27, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E, 0x2E, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x2E, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x27, 0x20, 0x18, 0x6F, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x18, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x83, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x19, 0x03, 0xB3, 0x20, 0x6F, 0x20, 0x7C, 0x2D, 0x2E, 0x5F, 0x2E, 0x2D, 0x69, 0x5F, 0x5F, 0x5F, 0x2F, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x91, 0xD7});
    imageReceiver((uint8_t[]){0xDD, 0x1E, 0x00, 0x1A, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5C, 0x2E, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xF2, 0x46, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1B, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x27, 0x2D, 0x2E, 0x5F, 0x5F, 0x5F, 0x5F, 0x6F, 0x5F, 0x7C, 0x20, 0x20, 0x20, 0x27, 0x2D, 0x2E, 0xF6, 0xB9, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1C, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x27, 0x2D, 0x2E, 0x2E, 0x2E, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x2E, 0x2E, 0x2E, 0x2D, 0x27, 0x20, 0x20, 0xC4, 0x9C, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1D, 0x03, 0xB3, 0x60, 0x2D, 0x2E, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x3A, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x42, 0x13, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1E, 0x03, 0xB3, 0x5F, 0x5F, 0x5F, 0x5F, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2E, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x25, 0xBB, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1F, 0x03, 0xB3, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x20, 0x20, 0x20, 0x60, 0x2D, 0x2E, 0x5F, 0x5F, 0x5F, 0xB7, 0xAB, 0xD7});
    imageReceiver((uint8_t[]){0xDD, 0x1E, 0x00, 0x20, 0x03, 0xB3, 0x2E, 0x2D, 0x2E, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x89, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x21, 0x03, 0xB3, 0x20, 0x2E, 0x27, 0x2E, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x13, 0x23, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x09, 0x00, 0x22, 0x03, 0xB3, 0x65, 0x2E, 0x27, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0x5F, 0x5F, 0x5F, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x56, 0x51, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x23, 0x03, 0xB3, 0x73, 0x63, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x27, 0x2E, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x33, 0xBA, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x24, 0x03, 0xB3, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x2E, 0x27, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x2C, 0x27, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x25, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0xCE, 0x2B, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x26, 0x03, 0xB3, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x3B, 0xE6, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x27, 0x03, 0xB3, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x3A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xA8, 0xD7});
 
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x01, 0x03, 0xB3, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4F, 0x02, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x02, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xB5, 0x28, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x03, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x9F, 0xD3, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x04, 0x03, 0xB3, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x2D, 0x2D, 0x2D, 0x22, 0x22, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0xE0, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x05, 0x03, 0xB3, 0x20, 0x22, 0x22, 0x22, 0x2D, 0x2D, 0x2D, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xC2, 0x3A, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x28, 0x00, 0x06, 0x03, 0xB3, 0x20, 0x0A, 0x3A, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x2E, 0x2D, 0x27, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0x20, 0x20, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x83, 0x45, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x28, 0x00, 0x07, 0x03, 0xB3, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x20, 0x20, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x20, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x48, 0xA7, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x28, 0x00, 0x08, 0x03, 0xB3, 0x5F, 0x20, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0x20, 0x0C, 0x95, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x28, 0x00, 0x09, 0x03, 0xB3, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x3A, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x42, 0x3A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x82, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x32, 0x00, 0x0A, 0x03, 0xB3, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x4C, 0x69, 0x74, 0x74, 0x6C, 0x65, 0x20, 0x45, 0x72, 0x72, 0x6F, 0x72, 0x3A, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x3A, 0x5F, 0x5F, 0xEA, 0x1D, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x32, 0x00, 0x0B, 0x03, 0xB3, 0x5F, 0x5F, 0x5F, 0x5F, 0x42, 0x3A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1C, 0xD9, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x3C, 0x00, 0x0C, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x3A, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x42, 0x3A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x50, 0x6F, 0x77, 0x65, 0x72, 0x20, 0x6E, 0x6F, 0x74, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x40, 0x78, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x3C, 0x00, 0x0D, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x66, 0x6F, 0x75, 0x6E, 0x64, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x83, 0xEE, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x0E, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x3A, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x3A, 0x20, 0xDB, 0x73, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x0F, 0x03, 0xB3, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x31, 0xC8, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x10, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xDB, 0xB5, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x11, 0x03, 0xB3, 0x20, 0x0A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x3D, 0x3D, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7C, 0x20, 0x5B, 0xBD, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x12, 0x03, 0xB3, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0x20, 0x7C, 0x20, 0xED, 0xFC, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x13, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x8A, 0xE0, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x14, 0x03, 0xB3, 0x4F, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0x20, 0x20, 0x27, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0xF0, 0xA5, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x15, 0x03, 0xB3, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x27, 0x20, 0x20, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xC1, 0xEB, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x16, 0x03, 0xB3, 0x20, 0x20, 0x0A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6F, 0x20, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0xEA, 0x68, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x17, 0x03, 0xB3, 0x27, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E, 0x2E, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x2E, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x27, 0x20, 0x18, 0x6F, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x18, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xBB, 0x83, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x19, 0x03, 0xB3, 0x20, 0x6F, 0x20, 0x7C, 0x2D, 0x2E, 0x5F, 0x2E, 0x2D, 0x69, 0x5F, 0x5F, 0x5F, 0x2F, 0x27, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xD9, 0x91, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1A, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5C, 0x2E, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xF2, 0x46, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1B, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x0A, 0x7C, 0x27, 0x2D, 0x2E, 0x5F, 0x5F, 0x5F, 0x5F, 0x6F, 0x5F, 0x7C, 0x20, 0x20, 0x20, 0x27, 0x2D, 0x2E, 0xF6, 0xB9, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1C, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x27, 0x2D, 0x2E, 0x2E, 0x2E, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x2E, 0x2E, 0x2E, 0x2D, 0x27, 0x20, 0x20, 0xC4, 0x9C, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1D, 0x03, 0xB3, 0x60, 0x2D, 0x2E, 0x5F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x3A, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x42, 0x13, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1E, 0x03, 0xB3, 0x5F, 0x5F, 0x5F, 0x5F, 0x3A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x2E, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x25, 0xBB, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x1F, 0x03, 0xB3, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x20, 0x20, 0x20, 0x60, 0x2D, 0x2E, 0x5F, 0x5F, 0x5F, 0xB7, 0xAB, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x20, 0x03, 0xB3, 0x2E, 0x2D, 0x2E, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x89, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x21, 0x03, 0xB3, 0x20, 0x2E, 0x27, 0x2E, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x13, 0x23, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x22, 0x03, 0xB3, 0x65, 0x2E, 0x27, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0x5F, 0x5F, 0x5F, 0x3A, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x56, 0x51, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x23, 0x03, 0xB3, 0x73, 0x63, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2E, 0x27, 0x2E, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x33, 0xBA, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x24, 0x03, 0xB3, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x2E, 0x27, 0x2E, 0x20, 0x20, 0x20, 0x20, 0x2C, 0x27, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x25, 0x03, 0xB3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3A, 0xCE, 0x2B, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x26, 0x03, 0xB3, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x3B, 0xE6, 0xD7});
    imageReceiver((uint8_t[]){0x7D, 0x1E, 0x00, 0x27, 0x03, 0xB3, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x3A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xA8, 0xD7});
   
    return 0;
}
 
by

C Language online compiler

Write, Run & Share C Language code online using OneCompiler's C online compiler for free. It's one of the robust, feature-rich online compilers for C language, running the latest C version which is C18. Getting started with the OneCompiler's C editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'C' and start coding!

Read inputs from stdin

OneCompiler's C online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample C program which takes name as input and print your name with hello.

#include <stdio.h>
int main()
{
    char name[50];
    printf("Enter name:");
    scanf("%s", name);
    printf("Hello %s \n" , name );
    return 0;
    
}

About C

C language is one of the most popular general-purpose programming language developed by Dennis Ritchie at Bell laboratories for UNIX operating system. The initial release of C Language was in the year 1972. Most of the desktop operating systems are written in C Language.

Key features:

  • Structured Programming
  • Popular system programming language
  • UNIX, MySQL and Oracle are completely written in C.
  • Supports variety of platforms
  • Efficient and also handle low-level activities.
  • As fast as assembly language and hence used as system development language.

Syntax help

Loops

1. If-Else:

When ever you want to perform a set of operations based on a condition if-else is used.

if(conditional-expression) {
   // code
} else {
   // code
}

You can also use if-else for nested Ifs and if-else-if ladder when multiple conditions are to be performed on a single variable.

2. Switch:

Switch is an alternative to if-else-if ladder.

switch(conditional-expression) {    
case value1:    
 // code    
 break;  // optional  
case value2:    
 // code    
 break;  // optional  
...    
    
default:     
 // code to be executed when all the above cases are not matched;    
} 

3. For:

For loop is used to iterate a set of statements based on a condition.

for(Initialization; Condition; Increment/decrement){  
  // code  
} 

4. While:

While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.

while(condition) {  
 // code 
}  

5. Do-While:

Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.

do {
  // code 
} while (condition); 

Arrays

Array is a collection of similar data which is stored in continuous memory addresses. Array values can be fetched using index. Index starts from 0 to size-1.

Syntax

One dimentional Array:

data-type array-name[size];

Two dimensional array:

data-type array-name[size][size];

Functions

Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity.

Two types of functions are present in C

  1. Library Functions:

Library functions are the in-built functions which are declared in header files like printf(),scanf(),puts(),gets() etc.,

  1. User defined functions:

User defined functions are the ones which are written by the programmer based on the requirement.

How to declare a Function

return_type function_name(parameters);

How to call a Function

function_name (parameters)

How to define a Function

return_type function_name(parameters) {  
  //code
}