//#include <windows.h>            // (Windows)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>             // (Linux)

// 表示器
void display_machine(char *d, int len_disp_moji, int len_buff)
{
    char c;
    int i;

    // 表示文字数分だけ表示
    fprintf(stderr, "\r");
    for (i = 0; i < len_disp_moji; i++) {
        fprintf(stderr, "%c", d[i]);
    }
    // ・左スライド
    // ・あふれる文字を(表示文字の長さ+表示器の長さ-1の)バッファの最後端に移動
    c = d[0];
    memmove(d, d + 1, len_buff - 1);
    d[len_buff - 1] = c;
}

//      main
int main()
{
    char *buff;                 // 表示文字の長さ+表示器の長さ-1のバッファ
    int i;
    char ch_sp;                 // 空白の文字
    char *h_moji;               // 表示文字
    int len_m;                  // 表示文字の長さ
    int len_h;                  // 表示器の長さ
    int n;                      // スライド回数

    h_moji = "Hello";
    ch_sp = '*';
    len_h = 10;
    len_m = strlen(h_moji);
    n = 100;
    buff = (char *) malloc(len_m + len_h - 1);
    memset(buff, ch_sp, len_m + len_h - 1);
    memmove(buff, h_moji, len_m);
    for (i = 0; i < n; i++) {
        display_machine(buff, len_h, len_m + len_h - 1);
        sleep(1);               // 1秒ウェイト (Linux)
        //Sleep(1000);            // 1秒ウェイト (Windows)
    }
    free(buff);

    return 0;
}
