|
|
|
@ -3,7 +3,7 @@
|
|
|
|
|
<id>gemini://technicalsuwako.moe</id>
|
|
|
|
|
<title>テクニカル諏訪子</title>
|
|
|
|
|
|
|
|
|
|
<updated>2023-05-12T00:00:00Z</updated>
|
|
|
|
|
<updated>2023-05-18T00:00:00Z</updated>
|
|
|
|
|
|
|
|
|
|
<author><name>テクニカル諏訪子</name></author>
|
|
|
|
|
<link href="gemini://technicalsuwako.moe" rel="alternate"></link>
|
|
|
|
@ -11,6 +11,217 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<entry>
|
|
|
|
|
<id>blog/c-lib-in-zig-use.gmi</id>
|
|
|
|
|
<author><name>凛</name></author>
|
|
|
|
|
<title type="html">【プログラミング】Zig言語でC向けのライブラリーを使用する方法</title>
|
|
|
|
|
<published>2023-05-18T00:00:00Z</published>
|
|
|
|
|
|
|
|
|
|
<category term="jp"></category>
|
|
|
|
|
|
|
|
|
|
<category term="blog"></category>
|
|
|
|
|
|
|
|
|
|
<category term="ゲーム開発"></category>
|
|
|
|
|
|
|
|
|
|
<category term="Zig"></category>
|
|
|
|
|
|
|
|
|
|
<category term="C言語"></category>
|
|
|
|
|
|
|
|
|
|
<category term="SDL"></category>
|
|
|
|
|
|
|
|
|
|
<link href="gemini://technicalsuwako.moe/blog/c-lib-in-zig-use.gmi" rel="alternate"></link>
|
|
|
|
|
<content type="html">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>ゲーム開発といえば、C++とか、Unityとか、Unrealとか等が思い出しますね。<br />
|
|
|
|
|
でも、Zigという新しい言語を使った方が良いと思います。<br />
|
|
|
|
|
しかし、新しい言語なら、必要なライブラリー(SDL、VulkanかOpenGL等)はまだ存在しませんね。<br />
|
|
|
|
|
心配なく、Zig言語の大メリットは、C言語及びC++のライブラリーをそのまま使える事です!</p>
|
|
|
|
|
<p><a href="https://repology.org/project/zig/versions">まずはZigコンパイラーをインストールして下さい。</a></p>
|
|
|
|
|
<pre><code lang="">mkdir zigdev <span style="color:#666">&amp;&amp;</span> <span style="color:#a2f">cd</span> zigdev
|
|
|
|
|
nvim main.zig
|
|
|
|
|
</code></pre><p>下記のソースコードを使っております。<br />
|
|
|
|
|
まずは確認して、何が起こる事を考えて下さい。</p>
|
|
|
|
|
<pre><code lang=""><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>std<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@import</span>(<span style="color:#b44">&#34;std&#34;</span>);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>c<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@cImport</span>({<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f">@cInclude</span>(<span style="color:#b44">&#34;SDL2/SDL.h&#34;</span>);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"></span>});<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">pub</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">fn</span><span style="color:#bbb"> </span>main()<span style="color:#bbb"> </span><span style="color:#666">!</span><span style="color:#0b0;font-weight:bold">void</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">if</span><span style="color:#bbb"> </span>(c.SDL_Init(c.SDL_INIT_VIDEO)<span style="color:#bbb"> </span><span style="color:#666">!=</span><span style="color:#bbb"> </span><span style="color:#666">0</span>)<span style="color:#bbb"> </span>{<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>c.SDL_Log(<span style="color:#b44">&#34;開始失敗: %s&#34;</span>,<span style="color:#bbb"> </span>c.SDL_GetError());<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">return</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">error</span>.SDLInitializationFailed;<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#080;font-style:italic">// defer = 終了する時、実行すると意味だ。
|
|
|
|
|
</span><span style="color:#080;font-style:italic"></span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">defer</span><span style="color:#bbb"> </span>c.SDL_Quit();<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>window<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_CreateWindow(<span style="color:#b44">&#34;hellow&#34;</span>,<span style="color:#bbb"> </span>c.SDL_WINDOWPOS_CENTERED,<span style="color:#bbb"> </span>c.SDL_WINDOWPOS_CENTERED,<span style="color:#bbb"> </span><span style="color:#666">640</span>,<span style="color:#bbb"> </span><span style="color:#666">400</span>,<span style="color:#bbb"> </span>c.SDL_WINDOW_OPENGL)<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">orelse</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>c.SDL_Log(<span style="color:#b44">&#34;ウィンドウ創作失敗: %s&#34;</span>,<span style="color:#bbb"> </span>c.SDL_GetError());<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">return</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">error</span>.SDLInitializationFailed;<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>};<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">defer</span><span style="color:#bbb"> </span>c.SDL_DestroyWindow(window);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>renderer<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_CreateRenderer(window,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span>c.SDL_RENDERER_PRESENTVSYNC)<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">orelse</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>c.SDL_Log(<span style="color:#b44">&#34;レンダー創作失敗: %s&#34;</span>,<span style="color:#bbb"> </span>c.SDL_GetError());<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">return</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">error</span>.SDLInitializationFailed;<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>};<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">defer</span><span style="color:#bbb"> </span>c.SDL_DestroyRenderer(renderer);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>mainloop<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">while</span><span style="color:#bbb"> </span>(<span style="color:#a2f;font-weight:bold">true</span>)<span style="color:#bbb"> </span>{<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>sdl_event<span style="color:#666">:</span><span style="color:#bbb"> </span>c.SDL_Event<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">undefined</span>;<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">while</span><span style="color:#bbb"> </span>(c.SDL_PollEvent(<span style="color:#666">&amp;</span>sdl_event)<span style="color:#bbb"> </span><span style="color:#666">!=</span><span style="color:#bbb"> </span><span style="color:#666">0</span>)<span style="color:#bbb"> </span>{<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">switch</span><span style="color:#bbb"> </span>(sdl_event.<span style="color:#0b0;font-weight:bold">type</span>)<span style="color:#bbb"> </span>{<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>c.SDL_QUIT<span style="color:#bbb"> </span><span style="color:#666">=&gt;</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">break</span><span style="color:#bbb"> </span><span style="color:#666">:</span>mainloop,<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">else</span><span style="color:#bbb"> </span><span style="color:#666">=&gt;</span><span style="color:#bbb"> </span>{},<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_SetRenderDrawColor(renderer,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_RenderClear(renderer);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>rect<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_Rect{<span style="color:#bbb"> </span>.x<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span>.y<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span>.w<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">60</span>,<span style="color:#bbb"> </span>.h<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">60</span><span style="color:#bbb"> </span>};<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>a<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0.001</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@intToFloat</span>(<span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>c.SDL_GetTicks());<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>t<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">2</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span>std.math.pi<span style="color:#bbb"> </span><span style="color:#666">/</span><span style="color:#bbb"> </span><span style="color:#666">3.0</span>;<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">100</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@cos</span>(<span style="color:#666">0.1</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span>a);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>rect.x<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">290</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@cos</span>(a));<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>rect.y<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">170</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@sin</span>(a));<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_SetRenderDrawColor(renderer,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_RenderFillRect(renderer,<span style="color:#bbb"> </span><span style="color:#666">&amp;</span>rect);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>rect.x<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">290</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@cos</span>(a<span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span>t));<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>rect.y<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">170</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@sin</span>(a<span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span>t));<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_SetRenderDrawColor(renderer,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_RenderFillRect(renderer,<span style="color:#bbb"> </span><span style="color:#666">&amp;</span>rect);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>rect.x<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">290</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@cos</span>(a<span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#666">2</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span>t));<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>rect.y<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">170</span><span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#a2f">@floatToInt</span>(<span style="color:#0b0;font-weight:bold">i32</span>,<span style="color:#bbb"> </span>r<span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span><span style="color:#a2f">@sin</span>(a<span style="color:#bbb"> </span><span style="color:#666">+</span><span style="color:#bbb"> </span><span style="color:#666">2</span><span style="color:#bbb"> </span><span style="color:#666">*</span><span style="color:#bbb"> </span>t));<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_SetRenderDrawColor(renderer,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>,<span style="color:#bbb"> </span><span style="color:#666">0xff</span>);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>_<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>c.SDL_RenderFillRect(renderer,<span style="color:#bbb"> </span><span style="color:#666">&amp;</span>rect);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>c.SDL_RenderPresent(renderer);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
|
|
|
|
|
</span></code></pre><p><img src="https://ass.technicalsuwako.moe/Screenshot_20230518_215802.png" alt="" /></p>
|
|
|
|
|
<p>特に下記のコードをご覧下さい。</p>
|
|
|
|
|
<pre><code lang=""><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>std<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@import</span>(<span style="color:#b44">&#34;std&#34;</span>);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>c<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@cImport</span>({<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f">@cInclude</span>(<span style="color:#b44">&#34;SDL2/SDL.h&#34;</span>);<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"></span>});<span style="color:#bbb">
|
|
|
|
|
</span></code></pre><p>@importはZig言語のライブラリーのインクルードで、@cImportはC言語のライブラリーのインクルードです。<br />
|
|
|
|
|
<code lang="">#DEFINE</code>なら、<code lang="">@cDefine</code>となります。<br />
|
|
|
|
|
例えば:</p>
|
|
|
|
|
<pre><code lang=""><span style="color:#a2f">@cDefine</span>(<span style="color:#b44">&#34;_GNU_SOURCE&#34;</span>,<span style="color:#bbb"> </span>{})<span style="color:#bbb">
|
|
|
|
|
</span></code></pre><p>@cImportの後で、「c.なになに」でC言語の関数等を使えます。<br />
|
|
|
|
|
例えば:</p>
|
|
|
|
|
<pre><code lang=""><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">if</span><span style="color:#bbb"> </span>(c.SDL_Init(c.SDL_INIT_VIDEO)<span style="color:#bbb"> </span><span style="color:#666">!=</span><span style="color:#bbb"> </span><span style="color:#666">0</span>)<span style="color:#bbb"> </span>{<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>c.SDL_Log(<span style="color:#b44">&#34;開始失敗: %s&#34;</span>,<span style="color:#bbb"> </span>c.SDL_GetError());<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">return</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">error</span>.SDLInitializationFailed;<span style="color:#bbb">
|
|
|
|
|
</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
|
|
|
|
|
</span></code></pre><p>コンパイルするには:</p>
|
|
|
|
|
<pre><code lang="">zig build-exe main.zig -O ReleaseSmall --name rei --library SDL2 --library SDL2main --library c -isystem <span style="color:#b44">&#34;/usr/include&#34;</span> -L <span style="color:#b44">&#34;/usr/lib&#34;</span>
|
|
|
|
|
</code></pre><p>以上</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</content>
|
|
|
|
|
</entry>
|
|
|
|
|
|
|
|
|
|
<entry>
|
|
|
|
|
<id>blog/urloli-210.gmi</id>
|
|
|
|
|
<author><name>凛</name></author>
|
|
|
|
|
<title type="html">【076】URLロリ 2.1.0登場</title>
|
|
|
|
|
<published>2023-05-13T00:00:00Z</published>
|
|
|
|
|
|
|
|
|
|
<category term="jp"></category>
|
|
|
|
|
|
|
|
|
|
<category term="blog"></category>
|
|
|
|
|
|
|
|
|
|
<category term="ウエブ開発"></category>
|
|
|
|
|
|
|
|
|
|
<category term="076"></category>
|
|
|
|
|
|
|
|
|
|
<category term="urloli"></category>
|
|
|
|
|
|
|
|
|
|
<category term="urlロリ"></category>
|
|
|
|
|
|
|
|
|
|
<link href="gemini://technicalsuwako.moe/blog/urloli-210.gmi" rel="alternate"></link>
|
|
|
|
|
<content type="html">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>URLロリ は2.1.0にバージョンアップしました!!</p>
|
|
|
|
|
<h2 id="url">URLロリって何?</h2>
|
|
|
|
|
<p>URLロリはクッソ小さいURL短縮作成ソフトだわ〜♡</p>
|
|
|
|
|
<h2 id="heading">変更</h2>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>ローカライズは関数化</li>
|
|
|
|
|
<li>API機能性</li>
|
|
|
|
|
<li>サーバーのソースコードを短くに</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<h2 id="api">APIについて</h2>
|
|
|
|
|
<p><a href="https://urlo.li/api">/api</a><br />
|
|
|
|
|
インスタンスURL及びバージョンを確認(GET)</p>
|
|
|
|
|
<h3 id="heading-1">例の結果</h3>
|
|
|
|
|
<pre><code lang="">{
|
|
|
|
|
&#34;url&#34;: &#34;https://urlo.li&#34;,
|
|
|
|
|
&#34;version&#34;: &#34;2.1.0&#34;
|
|
|
|
|
}
|
|
|
|
|
</code></pre><p><a href="https://urlo.li/api/lolify">/api/lolify</a><br />
|
|
|
|
|
URLを短縮する(既に存在する場合、短縮済みURLを表示) (POST)</p>
|
|
|
|
|
<h3 id="heading-2">必須のパラメートル</h3>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>url</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<h3 id="heading-3">例の結果</h3>
|
|
|
|
|
<p>既に存在する場合</p>
|
|
|
|
|
<pre><code lang="">curl -d url=gemini://technicalsuwako.moe https://urlo.li/api/lolify
|
|
|
|
|
{
|
|
|
|
|
&#34;code&#34;: 200,
|
|
|
|
|
&#34;error&#34;: &#34;&#34;,
|
|
|
|
|
&#34;url&#34;: &#34;https://urlo.li/yoWJx&#34;,
|
|
|
|
|
&#34;origin&#34;: &#34;gemini://technicalsuwako.moe&#34;,
|
|
|
|
|
&#34;isnew&#34;: false
|
|
|
|
|
}
|
|
|
|
|
</code></pre><p>新しく追加された場合</p>
|
|
|
|
|
<pre><code lang="">curl -d url=gemini://technicalsuwako.moe/about https://urlo.li/api/lolify
|
|
|
|
|
{
|
|
|
|
|
&#34;code&#34;: 200,
|
|
|
|
|
&#34;error&#34;: &#34;&#34;,
|
|
|
|
|
&#34;url&#34;: &#34;https://urlo.li/fiW3B&#34;,
|
|
|
|
|
&#34;origin&#34;: &#34;gemini://technicalsuwako.moe/about&#34;,
|
|
|
|
|
&#34;isnew&#34;: true
|
|
|
|
|
}
|
|
|
|
|
</code></pre><p>エラーの場合</p>
|
|
|
|
|
<pre><code lang="">curl -d url=technicalsuwako.moe https://urlo.li/api/lolify
|
|
|
|
|
{
|
|
|
|
|
&#34;code&#34;: 400,
|
|
|
|
|
&#34;error&#34;: &#34;URLは「http://」又は「https://」で始めます。&#34;,
|
|
|
|
|
&#34;url&#34;: &#34;&#34;,
|
|
|
|
|
&#34;origin&#34;: &#34;&#34;,
|
|
|
|
|
&#34;isnew&#34;: false
|
|
|
|
|
}%
|
|
|
|
|
</code></pre><pre><code lang="">curl -d url=gemini://technicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moetechnicalsuwako.moe https://urlo.li/api/lolify
|
|
|
|
|
{
|
|
|
|
|
&#34;code&#34;: 400,
|
|
|
|
|
&#34;error&#34;: &#34;URLは500文字以内です。&#34;,
|
|
|
|
|
&#34;url&#34;: &#34;&#34;,
|
|
|
|
|
&#34;origin&#34;: &#34;&#34;,
|
|
|
|
|
&#34;isnew&#34;: false
|
|
|
|
|
}
|
|
|
|
|
</code></pre><h2 id="heading-4">ソースコード</h2>
|
|
|
|
|
<p><a href="https://gitler.moe/suwako/urloli">Gitler</a></p>
|
|
|
|
|
<h2 id="heading-5">公式インスタンス</h2>
|
|
|
|
|
<p><a href="https://urlo.li/">https://urlo.li/</a></p>
|
|
|
|
|
<h2 id="heading-6">ダウンロード</h2>
|
|
|
|
|
<p><a href="https://gitler.moe/suwako/urloli/releases">リリースページ</a></p>
|
|
|
|
|
<h2 id="heading-7">会話</h2>
|
|
|
|
|
<h3 id="xmpp">XMPP</h3>
|
|
|
|
|
<p><a href="xmpp:urloli@chat.xmpp.076.ne.jp?join">xmpp:urloli@chat.xmpp.076.ne.jp?join</a></p>
|
|
|
|
|
<h3 id="irc">IRC</h3>
|
|
|
|
|
<p>irc.076.ne.jp/6697<br />
|
|
|
|
|
#urloli</p>
|
|
|
|
|
<p>以上</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</content>
|
|
|
|
|
</entry>
|
|
|
|
|
|
|
|
|
|
<entry>
|
|
|
|
|
<id>blog/urloli-202.gmi</id>
|
|
|
|
|
<author><name>凛</name></author>
|
|
|
|
@ -167,139 +378,5 @@
|
|
|
|
|
</content>
|
|
|
|
|
</entry>
|
|
|
|
|
|
|
|
|
|
<entry>
|
|
|
|
|
<id>blog/vixip-release.gmi</id>
|
|
|
|
|
<author><name>凛</name></author>
|
|
|
|
|
<title type="html">【オワコンテック】vixip 1.0.0登場</title>
|
|
|
|
|
<published>2023-05-07T00:00:00Z</published>
|
|
|
|
|
|
|
|
|
|
<category term="jp"></category>
|
|
|
|
|
|
|
|
|
|
<category term="blog"></category>
|
|
|
|
|
|
|
|
|
|
<category term="ウエブ開発"></category>
|
|
|
|
|
|
|
|
|
|
<category term="オワコンテック"></category>
|
|
|
|
|
|
|
|
|
|
<category term="vixip"></category>
|
|
|
|
|
|
|
|
|
|
<link href="gemini://technicalsuwako.moe/blog/vixip-release.gmi" rel="alternate"></link>
|
|
|
|
|
<content type="html">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>前に<a href="https://urlo.li/">URLロリ</a>、<a href="https://hozon.site/">保存サイト</a>、及び<a href="https://mixi.owacon.moe/">spliti</a>を作って、発行しましたが、今からここのブログで新リリースについて報告すると思います。<br />
|
|
|
|
|
可能なタグは:</p>
|
|
|
|
|
<ul>
|
|
|
|
|
<li><a href="https://076.moe/">076</a> (一般なウエブ開発。Go言語、又はC言語の利用。PHPはレガシープロジェクトのみ)</li>
|
|
|
|
|
<li><a href="https://owacon.moe/">オワコンテック</a> (プライバシーUIのウエブ開発。PHPの利用)</li>
|
|
|
|
|
<li><a href="https://nippai.moe/">にっぱいゲームズ</a> (ゲーム開発、<a href="http://comiket.co.jp/">コミケ</a>や<a href="http://cfxnvps5mxzdfh7aw5gwhhx2hmbr5vbww4m4m3znk6sjxnrd6l7bvnid.onion/">オニケ</a>等に参加するのは目指す。C言語、C++、又はZig言語の利用)
|
|
|
|
|
です。</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<h2 id="vixip">vixipって何?</h2>
|
|
|
|
|
<p>vixipはPixiv向けプライバシーUIです。<br />
|
|
|
|
|
PixivはTorやVPNでアクセス出来なく、<a href="http://jezf25zgvxlsvuzdzm6fg2hoetmruhy4uxnolyw46tuh4jugcwc7byqd.onion/Cloudflare%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84%E7%90%86%E7%94%B1%EF%BC%88%E3%83%AA%E3%83%81%E3%83%A3%E3%83%BC%E3%83%89%E3%83%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%9E%E3%83%B3%EF%BC%89">クラフレ</a>を使って、JSは必須ですので、プライバシーは全くありません。<br />
|
|
|
|
|
そうして、アカウントを持ってなければ、あんま何も見えません。<br />
|
|
|
|
|
ですから、vixipを作りました。</p>
|
|
|
|
|
<h2 id="heading">機能性</h2>
|
|
|
|
|
<ul>
|
|
|
|
|
<li>JSは不要</li>
|
|
|
|
|
<li>イラストや漫画の表示</li>
|
|
|
|
|
<li>コメントの表示(最新の5つのみ)</li>
|
|
|
|
|
<li>オススメのイラストの表示</li>
|
|
|
|
|
<li>イラストの検索</li>
|
|
|
|
|
<li>RSSを使って作者にフォロー</li>
|
|
|
|
|
<li>画像プロクシー(ログインせずイラストの拝見)</li>
|
|
|
|
|
<li>R18とR18Gも拝見可能(インスタンス次第)</li>
|
|
|
|
|
</ul>
|
|
|
|
|
<h2 id="heading-1">ソースコード</h2>
|
|
|
|
|
<p><a href="https://gitler.moe/suwako/vixip">Gitler</a></p>
|
|
|
|
|
<h2 id="heading-2">公式インスタンス</h2>
|
|
|
|
|
<p>一般ネット: <a href="%E3%82%AA%E3%83%AF%E3%82%B3%E3%83%B3Pixiv">https://pixiv.owacon.moe/</a><br />
|
|
|
|
|
TorとI2Pは今週中設置します。</p>
|
|
|
|
|
<h2 id="heading-3">スクショ</h2>
|
|
|
|
|
<p><img src="https://ass.technicalsuwako.moe/Screenshot_20230507_002317.png" alt="" /><br />
|
|
|
|
|
<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_002945.png" alt="" /><br />
|
|
|
|
|
<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_003137.png" alt="" /><br />
|
|
|
|
|
<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_003703.png" alt="" /><br />
|
|
|
|
|
<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_004053.png" alt="" /><br />
|
|
|
|
|
<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_004224.png" alt="" /><br />
|
|
|
|
|
<img src="https://ass.technicalsuwako.moe/Screenshot_20230507_004437.png" alt="" /></p>
|
|
|
|
|
<p>以上</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</content>
|
|
|
|
|
</entry>
|
|
|
|
|
|
|
|
|
|
<entry>
|
|
|
|
|
<id>blog/openbsd-zsh-udivdi3-syusei.gmi</id>
|
|
|
|
|
<author><name>凛</name></author>
|
|
|
|
|
<title type="html">【OpenBSD】更新後「zsh: undefined symbol '_udivdi3'」というエラーの修正する方法</title>
|
|
|
|
|
<published>2023-04-19T00:00:00Z</published>
|
|
|
|
|
|
|
|
|
|
<category term="jp"></category>
|
|
|
|
|
|
|
|
|
|
<category term="blog"></category>
|
|
|
|
|
|
|
|
|
|
<category term="bsd"></category>
|
|
|
|
|
|
|
|
|
|
<category term="openbsd"></category>
|
|
|
|
|
|
|
|
|
|
<link href="gemini://technicalsuwako.moe/blog/openbsd-zsh-udivdi3-syusei.gmi" rel="alternate"></link>
|
|
|
|
|
<content type="html">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>OpenBSD 7.3は公開されましたので、直ぐ全てのサーバー(64-bit)を更新しました。<br />
|
|
|
|
|
それは問題無しで出来ました。<br />
|
|
|
|
|
でも、ThinkPad T43(32-bit)で下記のエラーが発生しました:</p>
|
|
|
|
|
<pre><code lang="">ssh 192.168.0.123
|
|
|
|
|
Last login: Tue Apr 18 22:32:51 2023
|
|
|
|
|
OpenBSD 7.3 (GENERIC) #660: Sat Mar 25 11:17:44 MDT 2023
|
|
|
|
|
|
|
|
|
|
Welcome to OpenBSD: The proactively secure Unix-like operating system.
|
|
|
|
|
|
|
|
|
|
Please use the sendbug(1) utility to report bugs in the system.
|
|
|
|
|
Before reporting a bug, please try to reproduce it with the latest
|
|
|
|
|
version of the code. With bug reports, please try to ensure that
|
|
|
|
|
enough information to reproduce the problem is enclosed, and if a
|
|
|
|
|
known fix for it exists, include that as well.
|
|
|
|
|
|
|
|
|
|
Cannot open X display!
|
|
|
|
|
xmodmap: unable to open display &#39;&#39;
|
|
|
|
|
-zsh:-zsh: undefined symbol &#39;__udivdi3&#39;
|
|
|
|
|
ld.so: -zsh: lazy binding failed!
|
|
|
|
|
Connection to 192.168.0.123 closed.
|
|
|
|
|
</code></pre><p>これのせいで、ノートでもttyでログイン出来なくなったり、端末を開かなくなった。<br />
|
|
|
|
|
1週間後、やっと修正する方法を見つけました。</p>
|
|
|
|
|
<p>まずは再起動して、起動画面で「boot -s」を入力して下さい。</p>
|
|
|
|
|
<pre><code lang="">Using drive 0, partition 3.
|
|
|
|
|
Loading…
|
|
|
|
|
probing : pc0 apm pci mem[632K 1533M a20=on]
|
|
|
|
|
disk: fd0 hd0+
|
|
|
|
|
&gt;&gt; OpenBSD/i386 BOOT 3.44
|
|
|
|
|
boot&gt; boot -s
|
|
|
|
|
|
|
|
|
|
Enter pathname of shell or RETURN for sh: sh
|
|
|
|
|
</code></pre><p>それでシングルユーザーモードに起動します。<br />
|
|
|
|
|
しかし、シングルユーザーモードは読み取り専用モードですので、まずはディスクをマウントするのは必要となります。<br />
|
|
|
|
|
それ後で、ルートユーザーのシェルはshに交換しましょう。</p>
|
|
|
|
|
<pre><code lang="">mount -a
|
|
|
|
|
chsh -s /bin/sh root
|
|
|
|
|
reboot
|
|
|
|
|
</code></pre><p>今はいつでも通りに起動して、CTRL+Alt+F2を押して、rootアカウントにログインして下さい。<br />
|
|
|
|
|
パッケージを更新しましょう。</p>
|
|
|
|
|
<pre><code lang="">pkg_add -ui
|
|
|
|
|
</code></pre><p>その後でzshに戻してはOKです。</p>
|
|
|
|
|
<pre><code lang="">chsh -s /usr/local/bin/zsh root
|
|
|
|
|
<span style="color:#a2f">exit</span>
|
|
|
|
|
</code></pre><p>CTRL+Alt+F5を押したら、GUI系ログイン画面に帰ります。<br />
|
|
|
|
|
ここから普通にパソコンを使えます。</p>
|
|
|
|
|
<p>以上</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</content>
|
|
|
|
|
</entry>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</feed>
|
|
|
|
|