<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Matheus</title>
    <description>The latest articles on Forem by Matheus (@mprog10).</description>
    <link>https://forem.com/mprog10</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1284151%2Fda4d76f4-45b7-49dc-82a9-51836eafb862.png</url>
      <title>Forem: Matheus</title>
      <link>https://forem.com/mprog10</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mprog10"/>
    <language>en</language>
    <item>
      <title>ISO Pascal is love</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Thu, 05 Mar 2026 02:33:21 +0000</pubDate>
      <link>https://forem.com/mprog10/iso-pascal-is-love-4fn9</link>
      <guid>https://forem.com/mprog10/iso-pascal-is-love-4fn9</guid>
      <description>&lt;p&gt;I finished the ISO Pascal book, and I found the language very interesting. I'm in love with this language!&lt;/p&gt;

&lt;p&gt;Unlike other Pascal implementations, ISO Pascal is minimalist. The language features thirty-five keywords, thirteen built-in procedures, and seventeen built-in functions. The language is proposed for teaching structured programming, but may do very well for other tasks. At first glance, the language may seem unusable or uneasy. However, once mastered, there's no going back! The language is excellent!&lt;/p&gt;

&lt;p&gt;The following is a program I wrote. The program reads from a file, constructs a circular linked list from the contents, and prints the contents.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight pascal"&gt;&lt;code&gt;&lt;span class="k"&gt;program&lt;/span&gt; &lt;span class="k"&gt;Index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;const&lt;/span&gt;
        &lt;span class="n"&gt;MaxArg&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;MaxStr&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;EndOfStr&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;type&lt;/span&gt;
        &lt;span class="n"&gt;PStrbuf&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;^&lt;/span&gt;&lt;span class="n"&gt;Strbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Strbuf&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt;
                &lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Integer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1.&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxStr&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="kt"&gt;Char&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PStrbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="n"&gt;Prev&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PStrbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
        &lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PStrbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;procedure&lt;/span&gt; &lt;span class="n"&gt;Print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PStrbuf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
        &lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Integer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;begin&lt;/span&gt;
        &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;EndOfStr&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="k"&gt;begin&lt;/span&gt;
                &lt;span class="k"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
                &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;Writeln&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;procedure&lt;/span&gt; &lt;span class="n"&gt;AllocStr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PStrbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;Overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="cm"&gt;{ The var declaration here means to pass by reference. }&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
        &lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Integer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Char&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;begin&lt;/span&gt;
        &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="n"&gt;Overflow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="n"&gt;Eoln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;MaxStr&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
                &lt;span class="k"&gt;begin&lt;/span&gt;
                        &lt;span class="k"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                        &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                        &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                        &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;end&lt;/span&gt;
                &lt;span class="k"&gt;else&lt;/span&gt;
                        &lt;span class="n"&gt;Overflow&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;True&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="n"&gt;Overflow&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
                &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;EndOfStr&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;procedure&lt;/span&gt; &lt;span class="n"&gt;AllocArg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Last&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PStrbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PStrbuf&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;begin&lt;/span&gt;
        &lt;span class="n"&gt;Last&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Prev&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Prev&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;Last&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;procedure&lt;/span&gt; &lt;span class="n"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt;
        &lt;span class="n"&gt;BufPtr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PStrbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PStrbuf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;begin&lt;/span&gt;
        &lt;span class="n"&gt;Reset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Prev&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;EndOfStr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Overflow&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;False&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="n"&gt;Overflow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="n"&gt;Eof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
        &lt;span class="k"&gt;begin&lt;/span&gt;
                &lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;AllocStr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Overflow&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;AllocArg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Str&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;Overflow&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
                &lt;span class="k"&gt;begin&lt;/span&gt;
                        &lt;span class="k"&gt;Writeln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Overflow!'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="k"&gt;end&lt;/span&gt;
                &lt;span class="k"&gt;else&lt;/span&gt;
                        &lt;span class="n"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="n"&gt;Overflow&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="k"&gt;begin&lt;/span&gt;
                &lt;span class="n"&gt;BufPtr&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;BufArg&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;BufPtr&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;BufArg&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
                &lt;span class="k"&gt;begin&lt;/span&gt;
                        &lt;span class="n"&gt;Print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BufPtr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                        &lt;span class="n"&gt;BufPtr&lt;/span&gt; &lt;span class="p"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;BufPtr&lt;/span&gt;&lt;span class="p"&gt;^.&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;end&lt;/span&gt;
        &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;begin&lt;/span&gt;
        &lt;span class="n"&gt;Main&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The language is very different from C. Such a small language, yet so much can be done. Really cool, and, at the same time, odd. It doesn't have &lt;code&gt;return&lt;/code&gt;. It doesn't have &lt;code&gt;break&lt;/code&gt;. It doesn't have &lt;code&gt;continue&lt;/code&gt;. It doesn't have a &lt;code&gt;sizeof&lt;/code&gt; operator. It doesn't have an address-of operator. Even then, it does excellently!&lt;/p&gt;

</description>
      <category>pascal</category>
      <category>iso</category>
    </item>
    <item>
      <title>GUI for OpenSoldat</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Mon, 29 Dec 2025 01:26:29 +0000</pubDate>
      <link>https://forem.com/mprog10/gui-for-opensoldat-2kla</link>
      <guid>https://forem.com/mprog10/gui-for-opensoldat-2kla</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4nbqc17jpt3jqkxcahw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4nbqc17jpt3jqkxcahw.png" width="800" height="634"&gt;&lt;/a&gt;&lt;br&gt;
This is a WIP GUI implementation for OpenSoldat, an exciting unique side-view multiplayer action game. The GUI is written in C, making use of OpenGL.&lt;/p&gt;

&lt;p&gt;GLtron 0.53 was used as base to develop the GUI. The entire work was relicensed under the 0BSD license.&lt;/p&gt;

&lt;p&gt;Contributions are very much appreciated.&lt;/p&gt;

&lt;p&gt;The sources are found &lt;a href="https://github.com/Krush206/libgltron" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>c</category>
      <category>frontend</category>
    </item>
    <item>
      <title>[G530BT] Devuan GNU/Linux installer</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Mon, 29 Sep 2025 14:02:26 +0000</pubDate>
      <link>https://forem.com/mprog10/g530bt-devuan-gnulinux-installer-4d0i</link>
      <guid>https://forem.com/mprog10/g530bt-devuan-gnulinux-installer-4d0i</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f1a8l6syhyyaiklwnaq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f1a8l6syhyyaiklwnaq.png" alt="Image for illustrative purposes only." width="640" height="1280"&gt;&lt;/a&gt;&lt;br&gt;
This is an Odin package for installing Devuan GNU/Linux on the G530BT. Note this is only for G530BT. Other versions of the Galaxy Grand Prime may have a different partition layout. Therefore, the installation on devices other than G530BT is discouraged. However, you're welcome to adapt the scripts for different versions of the Galaxy Grand Prime.&lt;/p&gt;

&lt;p&gt;Note this will erase &lt;strong&gt;ALL&lt;/strong&gt; your data. Back up your data before proceeding.&lt;/p&gt;

&lt;p&gt;Download &lt;a href="https://archive.org/download/g530bt-devuan/G530BT_devuan.tar" rel="noopener noreferrer"&gt;the TAR file&lt;/a&gt;, run Odin, select the file from AP/PDA, and start flashing.&lt;/p&gt;

&lt;p&gt;Note there's no progress status for the installation. If everything did right, you should be able to use ADB. Note ADBD takes about 2 minutes to load and run. Be patient.&lt;/p&gt;

&lt;p&gt;If something did wrong, you can always boot into recovery mode and use ADB from there.&lt;/p&gt;

&lt;p&gt;The sources for the Linux kernel can be found &lt;a href="https://github.com/Krush206/android_kernel_samsung_fortuna3g" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Noteworthy files are &lt;code&gt;/etc/inittab&lt;/code&gt;, &lt;code&gt;/etc/boot&lt;/code&gt;, &lt;code&gt;/etc/fstab&lt;/code&gt;, &lt;code&gt;/sbin/adbd&lt;/code&gt;. These files are present in the &lt;code&gt;devuan.tgz&lt;/code&gt; file, present in the &lt;code&gt;cache.img.ext4&lt;/code&gt; file. Out of these files, the most interesting is &lt;code&gt;/etc/boot&lt;/code&gt;. You can tune and set up the boot sequence in this file.&lt;/p&gt;

&lt;p&gt;Tools used to create this package include &lt;a href="https://github.com/anestisb/android-simg2img" rel="noopener noreferrer"&gt;simg2img&lt;/a&gt;, &lt;a href="https://xdaforums.com/t/tool-android-image-kitchen-unpack-repack-kernel-ramdisk-win-android-linux-mac.2073775/" rel="noopener noreferrer"&gt;Android Image Kitchen&lt;/a&gt;, &lt;a href="https://github.com/mirror/busybox" rel="noopener noreferrer"&gt;Busybox&lt;/a&gt;, &lt;a href="https://github.com/Krush206/adbd-lollipop" rel="noopener noreferrer"&gt;adbd&lt;/a&gt;, &lt;a href="https://archive.org/details/gcc-linaro-4.9" rel="noopener noreferrer"&gt;gcc-linaro-4.9&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>gnu</category>
      <category>samsung</category>
    </item>
    <item>
      <title>Menu written in Objective-C, for GLtron.</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Mon, 28 Jul 2025 01:09:40 +0000</pubDate>
      <link>https://forem.com/mprog10/menu-written-in-objective-c-for-gltron-ob7</link>
      <guid>https://forem.com/mprog10/menu-written-in-objective-c-for-gltron-ob7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2c3whiyl8jw7y6itqeq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2c3whiyl8jw7y6itqeq.png" width="402" height="332"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqpuh6wbd4ecmlpqkpo6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqpuh6wbd4ecmlpqkpo6.png" width="402" height="332"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiu0o6xvloh9iez1zch5t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiu0o6xvloh9iez1zch5t.png" width="402" height="332"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprn9ll567rr7ed1knwbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fprn9ll567rr7ed1knwbq.png" width="402" height="332"&gt;&lt;/a&gt;&lt;br&gt;
I'm developing a small GUI for GLtron, in Objective-C. Objective-C is an amazing language. Initially, this was only a GUI for selecting the audio driver. However, I decided to expand to rewrite the entire OpenGL-designed menu in Objective-C.&lt;/p&gt;

&lt;p&gt;Although I'm not a front-end developer, I'm loving this.&lt;/p&gt;

&lt;p&gt;The sources are found &lt;a href="https://github.com/Krush206/gltron-old/tree/0.53-menu-objc" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Contributions are welcome!&lt;/p&gt;

</description>
      <category>objectivec</category>
      <category>gltron</category>
      <category>programming</category>
      <category>frontend</category>
    </item>
    <item>
      <title>ADBD: binary size-reduced version</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Mon, 10 Mar 2025 17:08:55 +0000</pubDate>
      <link>https://forem.com/mprog10/adbd-binary-size-reduced-version-1d60</link>
      <guid>https://forem.com/mprog10/adbd-binary-size-reduced-version-1d60</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcxce5lm244ubbavnzv3p.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcxce5lm244ubbavnzv3p.webp" alt="Android Debug Bridge" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
Following my previous post on &lt;a href="https://dev.to/mprog10/adb-access-from-stock-recovery-65g"&gt;ADB access from stock recovery&lt;/a&gt;, I implemented &lt;a href="https://github.com/hadess/adbd/pull/10" rel="noopener noreferrer"&gt;a static version based on &lt;code&gt;lollipop-release&lt;/code&gt;&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@Digitron:~/adbd-lollipop-release/adb# wc -c &amp;lt; adbd
552296
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@Digitron:~/adbd-lollipop-release/adb# file adbd
adbd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), statically linked, BuildID[sha1]=b3c3b7ad245a3bec2e40df678fd1a70bc9db0198, for GNU/Linux 3.2.0, stripped
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The work provides an ADBD binary worth of reduced size. The original, marshmallow implementation holds 3 Mbytes if statically linked + stripped. The &lt;code&gt;lollipop-release&lt;/code&gt; implementation holds half a Mbyte if statically linked + stripped.&lt;/p&gt;

&lt;p&gt;Those who have limited mobile storage might find interesting running the &lt;code&gt;lollipop-release&lt;/code&gt; version.&lt;/p&gt;

&lt;p&gt;My Galaxy Gran Prime is successfully running Devuan GNU/Linux. Sadly, some apps don't work, due to dated kernel. Still a great solution to those owning an unused Android device.&lt;/p&gt;

</description>
      <category>android</category>
      <category>adb</category>
      <category>programming</category>
      <category>linux</category>
    </item>
    <item>
      <title>Control your PlayStation 3 remotely</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Sun, 23 Feb 2025 20:51:47 +0000</pubDate>
      <link>https://forem.com/mprog10/control-your-playstation-3-remotely-3lh9</link>
      <guid>https://forem.com/mprog10/control-your-playstation-3-remotely-3lh9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzfeuipixshetb1nx5yo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzfeuipixshetb1nx5yo.jpg" alt="PlayStation 3 Remote Gamepad" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
This is &lt;a href="https://github.com/Krush206/ps3-remote-gamepad" rel="noopener noreferrer"&gt;an app&lt;/a&gt; I developed in the spare time to simulate a PlayStation 3 controller from a computer. Currently, isn't possible to remap controls, but work is on the way.&lt;/p&gt;

&lt;p&gt;Note webMAN MOD is required for this to work.&lt;/p&gt;

&lt;p&gt;Only tested on FreeBSD, and only with Clang compiler.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use
&lt;/h2&gt;

&lt;p&gt;Install webMAN MOD, build &lt;code&gt;pad.c&lt;/code&gt; and run the following:&lt;br&gt;
&lt;code&gt;./a.out &amp;lt;PlayStation 3 ip&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key bindings
&lt;/h2&gt;

&lt;p&gt;Up arrow - D-pad up;&lt;br&gt;
Down arrow - D-pad down;&lt;br&gt;
Right arrow - D-pad right;&lt;br&gt;
Left arrow - D-pad left;&lt;br&gt;
W - Triangle;&lt;br&gt;
Z - Cross;&lt;br&gt;
S - Circle;&lt;br&gt;
A - Square;&lt;br&gt;
E - R1;&lt;br&gt;
Q - L1;&lt;br&gt;
C - R2;&lt;br&gt;
X - L2;&lt;br&gt;
1 - START;&lt;br&gt;
2 - SELECT;&lt;br&gt;
H (lowercase) - Home;&lt;br&gt;
H (uppercase) - Home (hold).&lt;/p&gt;

</description>
      <category>programming</category>
      <category>c</category>
      <category>playstation3</category>
    </item>
    <item>
      <title>sm64coopdx ported to FreeBSD</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Sun, 23 Feb 2025 13:42:28 +0000</pubDate>
      <link>https://forem.com/mprog10/sm64coopdx-ported-to-freebsd-3gmd</link>
      <guid>https://forem.com/mprog10/sm64coopdx-ported-to-freebsd-3gmd</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frjs36t58uurd0bk5fnf3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frjs36t58uurd0bk5fnf3.png" alt="sm64coopdx" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
I managed to &lt;a href="https://github.com/coop-deluxe/sm64coopdx/pull/659" rel="noopener noreferrer"&gt;port sm64coopdx to FreeBSD&lt;/a&gt;. I made some small adjustments in the Makefile and Python scripts. The hard parts were Lua and optimization level. Optimization level 2 rendered SIGSEGV at times. Optimization level Z (for aggressive size optimization) solved the issue. As for Lua, the release 5.3.5 rendered SIGABRT. Updating to 5.4.7 solved the issue.&lt;/p&gt;

&lt;p&gt;There also are input issues regarding external inputs. I couldn't get my Microntek gamepad working. Haven't managed to investigate.&lt;/p&gt;

&lt;p&gt;I'm not confident SIGSEGV shall be fixed changing the optimization level. There might be some wrong code somewhere I couldn't find. Had no luck tracing with LLDB.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(lldb) bt
* thread #1, name = 'sm64coopdx', stop reason = signal SIGSEGV: address not mapped to object (fault address: 0xffffffff02b5cdb0)
  * frame #0: 0x000000000274e369 sm64coopdx`vec3f_get_dist_and_angle [inlined] atan2s(y=0, x=&amp;lt;unavailable&amp;gt;) at math_util.c:856:41
    frame #1: 0x000000000274e337 sm64coopdx`vec3f_get_dist_and_angle(from=0x000034ba8cbb2f44, to=0x0000000822eba9ec, dist=&amp;lt;unavailable&amp;gt;, pitch=&amp;lt;unavailable&amp;gt;, yaw=0x000000000346af2a) at math_util.c:765:12
    frame #2: 0x0000000002781a74 sm64coopdx`next_lakitu_state(newPos=0x0000000822ebaa68, newFoc=0x0000000822ebaa78, curPos=0x000034ba8cbb2f50, curFoc=0x000034ba8cbb2f44, oldPos=0x000000000346b4d8, oldFoc=0x000000000346b4e4, yaw=0) at camera.c:5656:9
    frame #3: 0x00000000027814b2 sm64coopdx`update_lakitu(c=0x000034ba8cbb2f40) at camera.c:3024:22
    frame #4: 0x0000000002782f34 sm64coopdx`update_camera(c=0x000034ba8cbb2f40) at camera.c:3352:5
    frame #5: 0x00000000027b315f sm64coopdx`play_mode_normal at level_update.c:1305:9
    frame #6: 0x00000000027b392e sm64coopdx`update_level at level_update.c:0
    frame #7: 0x000000000274a728 sm64coopdx`level_cmd_call_loop at level_script.c:287:17
    frame #8: 0x000000000274a040 sm64coopdx`level_script_execute(cmd=&amp;lt;unavailable&amp;gt;) at level_script.c:1146:13
    frame #9: 0x000000000279f2d6 sm64coopdx`game_loop_one_iteration at game_init.c:603:24
    frame #10: 0x000000000287c077 sm64coopdx`produce_one_frame at pc_main.c:312:5
    frame #11: 0x000000000287c76a sm64coopdx`main(argc=&amp;lt;unavailable&amp;gt;, argv=&amp;lt;unavailable&amp;gt;) at pc_main.c:538:9
    frame #12: 0x0000000828634c3a libc.so.7`__libc_start1 + 298
    frame #13: 0x0000000002745240 sm64coopdx`_start at crt1_s.S:83
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>programming</category>
      <category>c</category>
      <category>freebsd</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>ADB access from stock recovery</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Fri, 21 Feb 2025 17:24:34 +0000</pubDate>
      <link>https://forem.com/mprog10/adb-access-from-stock-recovery-65g</link>
      <guid>https://forem.com/mprog10/adb-access-from-stock-recovery-65g</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuygnaf0vvbwl0j4he2fe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuygnaf0vvbwl0j4he2fe.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
ADB has issues from TWRP on the Samsung Galaxy Gran Prime. I modified the stock recovery so that ADB can be used as in TWRP. This is composed of a modified RAM disk + kernel. The modifications introduced in the RAM disk are for allowing ADB to be used as in TWRP. For that, I rebuilt &lt;code&gt;adbd&lt;/code&gt; from &lt;a href="https://github.com/Krush206/adbd-hadess" rel="noopener noreferrer"&gt;this source&lt;/a&gt;, as well as modified &lt;code&gt;default.prop&lt;/code&gt; with the following parameters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ro.secure=0
ro.debuggable=1
persist.sys.usb.config=adb
ro.adb.secure=0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As for &lt;a href="https://github.com/Krush206/android_kernel_samsung_fortuna3g/commit/12491cc4a7b12fc7b51f06a489c7566b59162aa6" rel="noopener noreferrer"&gt;the kernel&lt;/a&gt;, I introduced a minimal modification so that SELinux remains permissive. Having SELinux in permissive mode is vital for allowing third-party utilities to run, as well as to have full privileges on the system.&lt;/p&gt;

&lt;p&gt;Use &lt;a href="https://xdaforums.com/t/tool-android-image-kitchen-unpack-repack-kernel-ramdisk-win-android-linux-mac.2073775/" rel="noopener noreferrer"&gt;Android Image Kitchen&lt;/a&gt; for extracting the RAM disk.&lt;/p&gt;

&lt;p&gt;All requires one to root is set SELinux to permissive. &lt;/p&gt;

</description>
      <category>android</category>
      <category>adb</category>
      <category>programming</category>
      <category>linux</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Fri, 21 Feb 2025 00:16:24 +0000</pubDate>
      <link>https://forem.com/mprog10/-1531</link>
      <guid>https://forem.com/mprog10/-1531</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/mprog10" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1284151%2Fda4d76f4-45b7-49dc-82a9-51836eafb862.png" alt="mprog10"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/mprog10/etcsh-an-enhanced-version-of-the-original-tcsh-415j" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;etcsh: an enhanced version of the original tcsh&lt;/h2&gt;
      &lt;h3&gt;Matheus ・ Jun 15 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#c&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#shell&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>c</category>
      <category>shell</category>
      <category>programming</category>
    </item>
    <item>
      <title>E-commerce management system</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Mon, 10 Feb 2025 02:21:56 +0000</pubDate>
      <link>https://forem.com/mprog10/e-commerce-management-system-4m6e</link>
      <guid>https://forem.com/mprog10/e-commerce-management-system-4m6e</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F13fvtwf20ehrnat31r9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F13fvtwf20ehrnat31r9q.png" alt="E-commerce management system" width="172" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdhh5b6ea8d4ytu6taeh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdhh5b6ea8d4ytu6taeh.png" alt="Add item menu" width="372" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxphuqfb0fv0vattiuo41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxphuqfb0fv0vattiuo41.png" alt="Delete item menu" width="372" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Written in Objective-C. SQL integration is in progress! Source code is found &lt;a href="https://github.com/Krush206/market_listing" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Contributions are welcome!&lt;/p&gt;

</description>
      <category>objectivec</category>
      <category>programming</category>
      <category>oop</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>etcsh: an enhanced version of the original tcsh</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Sat, 15 Jun 2024 05:15:12 +0000</pubDate>
      <link>https://forem.com/mprog10/etcsh-an-enhanced-version-of-the-original-tcsh-415j</link>
      <guid>https://forem.com/mprog10/etcsh-an-enhanced-version-of-the-original-tcsh-415j</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/Krush206/etcsh" rel="noopener noreferrer"&gt;etcsh&lt;/a&gt; is an enhanced version of the original tcsh, which is a version of the original Berkeley C shell implementing file name completion and command line editing.&lt;/p&gt;

&lt;p&gt;etcsh features the following enhancements and fixes over the original tcsh.&lt;br&gt;
• Function declarations;&lt;br&gt;
• variable assignment from pipes and redirections;&lt;br&gt;
• comments on interactive sessions;&lt;br&gt;
• tell whether &lt;code&gt;stdin&lt;/code&gt; is empty or not;&lt;br&gt;
• variable expansion on expressions corrected;&lt;br&gt;
• piped built-ins are forked;&lt;br&gt;
• missing &lt;code&gt;test&lt;/code&gt; built-in implemented;&lt;br&gt;
• read-write variable flag;&lt;br&gt;
• &lt;code&gt;exit&lt;/code&gt; shall cancel lists.&lt;/p&gt;

&lt;p&gt;More is to come. Feedbacks and contributions are much appreciated.&lt;/p&gt;

</description>
      <category>c</category>
      <category>shell</category>
    </item>
    <item>
      <title>Modifications on [T]csh</title>
      <dc:creator>Matheus</dc:creator>
      <pubDate>Sun, 18 Feb 2024 18:07:31 +0000</pubDate>
      <link>https://forem.com/mprog10/modifications-on-tcsh-1d06</link>
      <guid>https://forem.com/mprog10/modifications-on-tcsh-1d06</guid>
      <description>&lt;p&gt;I've introduced some modifications on [T]csh.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Functions (only for scripts)&lt;/li&gt;
&lt;li&gt;Read files into a variable&lt;/li&gt;
&lt;li&gt;Comments on interactive sessions&lt;/li&gt;
&lt;li&gt;Tell whether &lt;em&gt;stdin&lt;/em&gt; is empty&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd appreciate for any feedback, suggestion or contribution. Contributions of any kind are very welcome.&lt;/p&gt;

&lt;p&gt;A key [T]csh developer asked me to create documentation and tests for &lt;a href="https://github.com/tcsh-org/tcsh/pull/77" rel="noopener noreferrer"&gt;my functions invention&lt;/a&gt;. I've written some tests, but I'm afraid they aren't enough.&lt;/p&gt;

&lt;p&gt;The source code is &lt;a href="https://github.com/Krush206/tcsh" rel="noopener noreferrer"&gt;here&lt;/a&gt;. The modifications are separated in branches.&lt;/p&gt;

&lt;p&gt;I've &lt;a href="https://github.com/Krush206/3bsd-csh" rel="noopener noreferrer"&gt;a repository for the original Csh&lt;/a&gt;, but only functions are there, and isn't up-to-date.&lt;/p&gt;

</description>
      <category>shell</category>
      <category>c</category>
    </item>
  </channel>
</rss>
