Пацаны спрашивают

  • Alexander Popov
    link
    fedilink
    arrow-up
    0
    ·
    4 years ago

    Вчера буквально сел за Си и это история успеха.

    Началось с того, что опять буржуй неосилятор не смог запустить мой лайнчер для майнкрафта. Это не удивительно, я уже два года обещаю для них сделать подробный гайд, но мне всё лень. А в лайнчере 20 строк bat кода.

    По моральным соображениям я в Git не тянут строку, в которой перечисленный все библиотеки, необходимые для запуска Minecraft, но делал zip релизы, где строка была.
    Макаки конечно не догадывались качать релиз и копировали код из master.
    Собственно эту строку генерировала отдельная утилита на Python, которая была вынесена в отдельный репозиторий.

    Но так, как Python даже Маск не смог запускать, что не удивительно, потому что даже меня выбешиват входить в venv, чтобы куча зависимостей заработала, было принято решение переписать утилиту на компилируемый язык.

    Я бы взял Crystal, так как последнее время на нём пишу, Go просто не нравится, но Crystal не умеет Windows. По этому не долго думая выбрал свою любимую Сишку.

    Через недолго была написана утилита, которая достигла полного паритета с Python версией и по количеству строк кода не сильно уходила от оригинала.

    А, для чего писал я это?
    Я получил лютый кайф писать на Сях снова. Сегодня займусь всякими гейскими плюшками из высокоуровневых языков наподобии цветного выхлопа.

    • LINUXTALKS-CO
      link
      fedilink
      arrow-up
      0
      ·
      edit-2
      4 years ago

      Это хорошо

      аподобии цветного выхлопа

      #include <stdio.h>
      
      
      #ifndef color_off
        #define cired()  "\x1B[31m"
        #define cigre()  "\x1B[32m"
        #define ciyel()  "\x1B[33m"
        #define ciaqu()  "\x1B[36m"
        #define cidef()  "\x1B[39m"
      #else
        #define cired()
        #define cigre()
        #define ciyel()
        #define ciaqu()
        #define cidef()
      #endif
      
      #define red(message) cired() message cidef()
      #define gre(message) cigre() message cidef()
      #define def(message) cidef() message cidef()
      #define yel(message) ciyel() message cidef()
      #define aqu(message) ciaqu() message cidef()
      
      enum
      {
        RED     = 31,
        GREEN   = 32,
        YELLOW  = 33,
        BLUE    = 34,
        PURPULE = 35,
        AQUA    = 36,
        DEFAULT = 39,
      };
      static void colorset(int color)
      {
        printf("\x1B[%dm",color);
      }
      
      int main(int argc, char *argv[])
      {
          /*так*/
          const char text[] = aqu("А я томат!");
      
          printf( red("Это ") gre("разноцветный ") yel("текст. %s\n"), text);
      
          /*или вот так и эдак*/
          colorset(RED);
          printf("В этом царстве-государстве всё красное!\n");
      
          colorset(YELLOW);
          printf("А в этом всё жёлтое!\n");
      
          colorset(DEFAULT);
          printf("А в остальных по обычному"gre("!\n"));
          /*я использую иногда когда мне хочется маленько смузи =)*/
          return 0;
      }
      

      Например для типа юнит-тестов

      xxx

        • LINUXTALKS-CO
          link
          fedilink
          arrow-up
          0
          ·
          4 years ago

          1

          #include <stdio.h>
          
          /*--------------Тут просто кишки----------------*/
          
          /*просто цвета*/
          #ifndef color_off
            #define cired()  "\x1B[31m"
            #define cigre()  "\x1B[32m"
            #define ciyel()  "\x1B[33m"
            #define ciaqu()  "\x1B[36m"
            #define cidef()  "\x1B[39m"
          #else
            #define cired()
            #define cigre()
            #define ciyel()
            #define ciaqu()
            #define cidef()
          #endif
          
          /*цвета + начертания - жирно*/
          #ifndef bold_off
            #define b_cired()  "\x1B[1;31m"
            #define b_cigre()  "\x1B[1;32m"
            #define b_ciyel()  "\x1B[1;33m"
            #define b_ciaqu()  "\x1B[1;36m"
            #define b_cidef()  "\x1B[1;39m"
            #define boldoff()  "\x1B[0m"
          #else
            #define b_cired()  cired()
            #define b_cigre()  cigre()
            #define b_ciyel()  ciyel()
            #define b_ciaqu()  ciaqu()
            #define b_cidef()  cidef()
          #endif
          
          /*цвета + начернтание - курсив*/
          #ifndef cur_off
            #define c_cired()  "\x1B[3;31m"
            #define c_cigre()  "\x1B[3;32m"
            #define c_ciyel()  "\x1B[3;33m"
            #define c_ciaqu()  "\x1B[3;36m"
            #define c_cidef()  "\x1B[3;39m"
            #define cursoff()  "\x1B[0m"
          #else
            #define c_cired()  cired()
            #define c_cigre()  cigre()
            #define c_ciyel()  ciyel()
            #define c_ciaqu()  ciaqu()
            #define c_cidef()  cidef()
          #endif
          
          /*---------------------тут API само-----------------------*/
          
          #define red(message) cired() message cidef()
          #define gre(message) cigre() message cidef()
          #define def(message) cidef() message cidef()
          #define yel(message) ciyel() message cidef()
          #define aqu(message) ciaqu() message cidef()
          
          #define b_red(message) b_cired() message cidef() boldoff() 
          #define b_gre(message) b_cigre() message cidef() boldoff() 
          #define b_def(message) b_cidef() message cidef() boldoff() 
          #define b_yel(message) b_ciyel() message cidef() boldoff() 
          #define b_aqu(message) b_ciaqu() message cidef() boldoff() 
          
          #define c_red(message) c_cired() message cidef() cursoff() 
          #define c_gre(message) c_cigre() message cidef() cursoff() 
          #define c_def(message) c_cidef() message cidef() cursoff() 
          #define c_yel(message) c_ciyel() message cidef() cursoff() 
          #define c_aqu(message) c_ciaqu() message cidef() cursoff()
          
          enum
          {
            RED     = 31,
            GREEN   = 32,
            YELLOW  = 33,
            BLUE    = 34,
            PURPULE = 35,
            AQUA    = 36,
            DEFAULT = 39,
          };
          static void colorset(int color)
          {
            printf("\x1B[%dm",color);
          }
          
          int main(int argc, char *argv[])
          {
              const char text[] = aqu("А я томат!");
          
              printf( b_red("Это ") gre("разноцветный ") c_yel("текст. %s\n"), text);
          
          
              printf("В этом "b_red("ЖИРНОМ")" царстве-государстве всё красное и "c_red("курсивное!")" иногда\n");
          
              printf(yel("А в этом всё" b_red(" не ") c_aqu("жёлтое") " и обычное!\n"));
          
              printf(c_gre("А ") b_gre("в ") c_aqu("остальных по обычному ")c_gre("!\n"));
              return 0;
          }
          
          

          Как добавить подчёркивания и прочее разберёшься сам. Там видно код 1 жирно код 3 курсив [0m сброс. Ну и покомпактнее можно сделать, но я накидал пример в лоб что-бы нагляднее было.