Ubuntu設定メモ

はじめに

なにやったかわすれないメモ。基本的に深くカスタムすることは考えていない。(カスタムするならGentooやArchのほうが楽しいので)

目次

追加でインストールしたアプリ

guake

GNOMEトップダウンターミナルです。

sudo apt install guake

自動起動するアプリケーションの設定にguakeを追加する
コマンドは

/usr/bin/guake

一応typeコマンドで調べておくこと

Docker

最近のUbuntuリポジトリのDockerはバージョンが新しいので、aptでインストールします。

sudo apt install docker.io

docker指定すると別のパッケージを引っ張ってくる?ので注意

sudo systemctl enable --now docker

Dockerデーモンの起動とユニットの有効化

自分はDockerグループにユーザーを追加するのはやめておいているので

alias docker='sudo docker'

エイリアスを組んでる感じ(これが悪いことなのか自信がないので、もし参考にした場合自己責任でおねがいしまーす)

debファイルでインストールしたソフ卜

インストールコマンド
debファイルのあるページに移動し

sudo apt install ./*.deb

もしくは、gdebiを使用する

Chrome

やはり便利な機能が多いので

www.google.com

VScode

snapストアの日本語対応を解決させることができなかったので

azure.microsoft.com

LibreOffice

公式からインストールした方が機能がしっかりしていると聞いたので。
*日本語パッケージと日本語ヘルプパッケージもインストールした。公式の日本語ダウンロードページを見ればすぐにわかると思う

ja.libreoffice.org

デフォルトがrpmなことに注意(Ubuntudeb

Linuxbrewでインストールしたもの

exaコマンド

まさかないとは思わなかった。

alias

## clear

alias cls='clear'

とした。やはり短い方が正義

言語関連

nim

choosenimで入れることをおすすめする

github.com

インストール後の処理

choosenim stable update
nimble update


c2nim(完璧ではないがC言語の構文をnimの構文に変換してくれるスグレモノ)

nimble install c2nim

Nim関連の情報源まとめ

はじめに

和訳した方の記事や公式のドキュメントをまとめたものです

目次

ドキュメント関連

Nim basics

公式

narimiran.github.io

和訳

qiita.com

Nim tutorial Part1

公式

nim-lang.org

和訳

前編

qiita.com

後編
qiita.com

Nim Tutorial Part2

公式

nim-lang.org

和訳

qiita.com

Nim Tutorial Part3

公式

nim-lang.org

和訳

qiita.com

Nim Manual

公式

nim-lang.org

和訳

qiita.com

標準ライブラリ

公式

nim-lang.org

一部和訳

http://nim-lang-081.osdn.jp/docs/lib.html

エッセンス的な

オブジェクト指向関連

qiita.com

NimTutorial part1のメモ

はじめに

NimTutorial Part1でのまとめ集(全てではない)です。

目次

内容

Default values

関数の最初の値を決めて置けるというもの。番兵みたいなことができないかな?

演算子

if `==`( `+`(3, 4), 7): echo "True"

これって`で囲うことで通常のプロシージャの動きをさせているんですよね。よってプロシージャのような引数の渡し方ができる!

イテレータ

for文のcountup関数のような、for文内で使用するものをイテレータと言う。返り値がreturn and continueの代わりにyieldになる以外は基本的に変化はない(プロトタイプ宣言が実装されれば…)

boolean・・・while, if, elif, whenで必要
char・・・1バイト(UTF-8の一部に使える)
string・・・終端0にはアクセスできない、またデフォルトはUTF−8
int・・・i8やuint64等もある( = 0`i8という書きかたもある)

数値間の型変換は、型を関数として利用することにより変換が可能

 x: int32 = 1.int32

内部表現

カスタム型などを使用する際は、文字列に変換する$だと処理仕切れない場合がある。その際の解決策がreprプロシージャを代用することである。しかし、$との動きが少し違うことに注意

行動な型

新たな型を定義する際にはtype文を使用する
オブジェクト型と列挙型はtype文の中でのみ定義することができる。

と言うことで、
このtype型を駆使してオブジェクトプログラミングをすることができる
また、C言語の構造体のようなことをしたければ、type文を使う

type
  biggestInt = int64      # biggest integer type that is available
  biggestFloat = float64  # biggest float type that is available

気をつけること
モジュールの外に見えるようにするには、*で明示する必要がある。(おそらく多く使うことになる)

参考になりそうなの
Nimのオブジェクト指向の整理 - Qiita

今後色々調べて正しい情報を探してみる

集合型

数学に置ける集合のような動作をさせることができる

type
  CharSet = set[char]
var
  x: CharSet
x = {'a'..'z', '0'..'9'}

このように定義し、値を入れる。このxを使って集合型同士で演算をすることが可能である(詳しくはTutorialに書いてある)

使用目的はプロシージャのフラグの型を決める時である。

配列

[]で作る

type
  IntArray = array[0..5, int] # an array that is indexed with 0..5
var
  x: IntArray
x = [1, 2, 3, 4, 5, 6]
for i in low(x)..high(x):
  echo x[i]

・配列へのアクセスで境界値チェック(無効にするにはコンパイルオプションの--bound_checks:off
・配列は値型
・代入演算子は配列を丸ごとコピーする

注意
・配列は単純な固定長のコンテナである。
・配列内の要素はすべて同じ型である。
・配列のインデックスはどんな順序型でもよい。

シーケンス型

・可変長 ・ヒープ領域なためGCの対象 ・配列[]の頭に@をつけることで、シーケンス型に変換ができる
・@[]とnilトレードオフの関係である(ヒープ領域の面で)
・for文の範囲にシーケンスを使う時は1、2つの変数を持つことができる
・一変数形式の場合は、変数は配列の値を保持する(systemモジュールのietms()) ・二変数形式の場合は、1つ目はインデックスの役割を、2つ目は値を保持する(systemモジュールのpairs())

オープン配列型

オープン配列型はパラメータのみで使われる
多次元配列には対応していない
ネストすることはできない

配列をプロシージャに渡す場合に色々な大きさの配列に対応しなければならなく問題を解決するものである。

var
  fruits:   seq[string]       # reference to a sequence of strings that is initialized with '@[]'
  capitals: array[3, string]  # array of strings with a fixed size

capitals = ["New York", "London", "Berlin"]   # array 'capitals' allows assignment of only three elements
fruits.add("Banana")          # sequence 'fruits' is dynamically expandable during runtime
fruits.add("Mango")

proc openArraySize(oa: openArray[string]): int =  # パラメータにしか使えないことがわかる
  oa.len

assert openArraySize(fruits) == 2     # ここでシーケンスだけでなく
assert openArraySize(capitals) == 3   # 配列型にも対応している

可変引数

これの目的は、多数の数の引数をプロシージャに渡すことにしようするものらしい(その際はコンパイラーにより配列へと変換される)

proc myWriteln(f: File, a: varargs[string]) =
  for s in items(a):
    write(f, s)
  write(f, "\n")

myWriteln(stdout, "abc", "def", "xyz")
# is transformed by the compiler to:
myWriteln(stdout, ["abc", "def", "xyz"])

このように変換が行われている

他にも、型変換にも使えるそうである

roc myWriteln(f: File, a: varargs[string, `$`]) =
  for s in items(a):
    write(f, s)
  write(f, "\n")

myWriteln(stdout, 123, "abc", 4.0)
# is transformed by the compiler to:
myWriteln(stdout, [$123, $"abc", $4.0])

スライス

簡単に言えば(怒られそうだが)配列の部分的な範囲にアクセスする手段となる

var
  a = "Nim is a programming language"
  b = "Slices are useless."

echo a[7..12] # --> 'a prog'
b[11..^2] = "useful"
echo b # --> 'Slices are useful.'

これもまた、公式のソースを見た方がわかりやすかった

他にも^hoge.len-1を使うこともできる

オブジェクト型

いわゆるC言語の構造体
異なる値を名前つきの構造体にまとめることができる

type
  Person = object
    name: string
    age: int

var person1 = Person(name: "Peter", age: 30)

echo person1.name # "Peter"
echo person1.age  # 30

var person2 = person1 # copy of person 1

person2.age += 14

echo person1.age # 30
echo person2.age # 44


# 順番が変えることもできる
let person3 = Person(age: 12, name: "Quentin")

# 全てのメンバーを指定する必要はない
let person4 = Person(age: 3)
# 指定されていないメンバーはデフォルトの値で初期化される
# この場合は空の文字列
doAssert person4.name == ""

定義モジュールの外部から見えるようにするには、オブジェクトフィールドに*をつけなければいけない

type
  Person* = object # 型が他のモジュールから見えるようになる
    name*: string  # このタイプのフィールドは他のモジュールから見えるようになっている
    age*: int

タプル型

タプル型はオブジェクト型と似ているが、フィールドの値から順序まで定義することになる。また、コンストラクタである()を使用することができる

type
  # type representing a person:
  # A person consists of a name and an age.
  Person = tuple
    name: string
    age: int
  
  # Alternative syntax for an equivalent type.
  PersonX = tuple[name: string, age: int]
  
  # anonymous field syntax
  PersonY = (string, int)

var
  person: Person
  personX: PersonX
  personY: PersonY

person = (name: "Peter", age: 30)
# Person and PersonX are equivalent
personX = person

# Create a tuple with anonymous fields:
personY = ("Peter", 30)

# A tuple with anonymous fields is compatible with a tuple that has
# field names.
person = personY
personY = person

# Usually used for short tuple initialization syntax
person = ("Peter", 30)

echo person.name # "Peter"
echo person.age  # 30

echo person[0] # "Peter"
echo person[1] # 30

# You don't need to declare tuples in a separate type section.
var building: tuple[street: string, number: int]
building = ("Rue del Percebe", 13)
echo building.street

# The following line does not compile, they are different tuples!
#person = building
# --> Error: type mismatch: got (tuple[street: string, number: int])
#     but expected 'Person'

()を使う例は以下のコードのように特定の値を代入する場合となる

import os

let
  path = "usr/local/nimc.html"
  (dir, name, ext) = splitFile(path)
  baddir, badname, badext = splitFile(path)
echo dir      # outputs `usr/local`
echo name     # outputs `nimc`
echo ext      # outputs `.html`
# 以下は全て同じ文字列が出力される
# `(dir: usr/local, name: nimc, ext: .html)`
echo baddir
echo badname
echo badext

リファレンスとポインタ型

この2つの違いはGCで管理されるかされないかになっているようです。通常はGCにトレースさせた方が安全であるため、リファレンス型が使用される。しかし、自作OSや組み込みを行う際はGCは組み込まないしハードウェアアクセスをするのにポインタが必要と言うときにポインタ型を使用する。

トレースする参照はref トレースしない参照はptr

と言うキーワードを使用することになる

また、[]はリファレンス型に対する逆参照になるらしい

type
  Node = ref object
    le, ri: Node
    data: int
var
  n: Node
new(n)
n.data = 9
# no need to write n[].data; in fact n[].data is highly discouraged!

トレースされるオブジェクトを新しく作る際はnewプロシージャが必要である。

また、トレースされない場合はalloc,dealloc,reallocといったプロシージャが使える

リファレンス型が何もさしていない場合は、nilを持つ

プロシージャ型

いわゆる関数ポインタ

呼び出し規約が型の適合性に影響するようです。(同じ呼出規約でなければ互換性がない)
呼出規約は以下を参照

Nim Manual

proc echoItem(x: int) = echo x

proc forEach(action: proc (x: int)) =   # ここに注目
  const
    data = [2, 3, 5, 7, 11]
  for d in items(data):
    action(d)

forEach(echoItem)

ディスティンクト型

元の型のサブタイプである関係を暗示しない型を新しく作成することができる。

注:明示的に振る舞いを定義する必要がある。

また、元となった型とディスティンクト型は一方から一方にキャストすることができる。

詳しくはManualをとのことらしい
公式

Nim Manual

和訳されている方の該当ページ

Nimマニュアルを日本語訳してみた - Qiita

モジュール

Pythonのimportみたいな(基本的にimport文を使っているのが多い)

モジュール意義は情報隠蔽や分割コンパイルを可能にすること

エクスポートされる時に重要なのが*である。これをつけているトップレベルの識別子のみが他のモジュールにエクスポートされる。

また、各モジュールはisMainModuleと言うマジック定数を持っている。これはモジュールがコンパイルされる時はtrueであるものらしく、これによりテストの埋め込みができる

when isMainModule:
  # test the new ``*`` operator for sequences:
  assert(@[1, 2, 3] * @[1, 2, 3] == @[1, 4, 9])

モジュールでは、例えば同じ名前の変数を二つのモジュールからエクスポートした場合は曖昧になってしまう(エラーをはく)。これを解決するには<モジュール名>.<変数名>とすることでできる。また、エクスポートしたモジュールで新しく同じ名前の変数を宣言した場合はそちらの方が優先される。

# Module A
var x*: string

# Module B
var x*: int

# Module C
import A, B
write(stdout, x) # error: x is ambiguous
write(stdout, A.x) # okay: qualifier used

var x = 4
write(stdout, x) # not ambiguous: uses the module C's x

プロシージャーやイテレータをエクスポートした場合はこの規則でなく、オーバーロードの規則が適用される。

# Module A
proc x*(a: int): string = $a

# Module B
proc x*(a: string): string = $a

# Module C
import A, B
write(stdout, x(3))   # no error: A.x is called
write(stdout, x(""))  # no error: B.x is called

proc x*(a: int): string = discard
write(stdout, x(3))   # ambiguous: which `x` is to call?

除外修飾子

import文を実行する際に除外したい識別子を除外するのに使う

import mymodule except y

from文

列挙した識別子のみをインポートする方法

from mymodule import x, y, z

識別子を修飾するのに使うことができる

通常

from mymodule import x, y, z

x()           # 修飾は必要ない

強制した場合

from mymodule import nil

mymodule.x()  # 修飾があるので問題ない

x()           # 修飾がないのでエラーを起こす

修飾の際の短い識別子を使うことができる

from mymodule as m import nil

m.x()         # mと言う再定義した修飾子を使用している

include文

include文はimport文と根本的に違う動きをする。ただ単にファイルを含めるだけである。(みんなimport文使ってるけど、どうなんだろ…)include文は長いモジュールを分割するのに使える。

gentooのカーネル設定めも

はじめに

kernelの設定は複雑なのでめもしています。これは、自分の機種X230のメモかつ初心者のメモなので参考にしない方がいいかと思います。また、気になった点があればアドバイスをもらえると嬉しいです。

目次

設定

走っているカーネルからの設定を入手を有効にする

General setup --->
            <*> Kernel .config support
                  <*> Enable access to .config though /proc.config.gz

devtmpfsの有効化

Device Drivers --->
  Generic Driver Options --->
    [*] Maintain a devtmpfs filesystem to mount at /dev
    [ ]   Automount devtmpfs at /dev, after the kernel mounted the rootfs

有線LANドライバの設定

X230では、e1000eであった

lspci -k | grep -A 2 -i ethernet

有効か確認してみると

grep -i e1000e

有効であったので、そのままとする

CPUの設定

CPU情報は

cat /proc/cpuinfo | less

で見れる
初期設定のGeneric-x86-x64から変更することもないので、そのままに

IA-32

Binary Emulations --->

に移動している?ので注意
有効になっていたのでそのままで

UEFI

Processor type and features  --->
    [*] EFI runtime service support 
    [*]   EFI stub support
    [*]     EFI mixed-mode support
  
Firmware Drivers  --->
    EFI (Extensible Firmware Interface) Support --->
        <*> EFI Variable Support via sysfs

USB

[*] USB support  --->
    <*>     xHCI HCD (USB 3.0) support
    [*]           xHCI support for debug capability
    < >          Generic xHCI friver for a platform device

USB3.0のサポートが有効化されてなかったので上のように登録

Filesystemの設定

File systems --->
  <*> Second extended fs support
         [*]   Ext2 extended attributes
           [*]     Ext2 POSIX Access Control Lists
           [*]     Ext2 Security Labels
  <*> The Extended 3 (ext3) filesyste
       [*]     Ext3 POSIX Access Control Lists
       [*]     Ext3 Security Labels
  -*-  The Extended 4 (ext4) filesystem
       -*-   Ext4 POSIX Access Control Lists
       -*-   Ext4 Security Labels
       [ ]   Ext4 Encryption
       [ ]   EXT4 debugging support
  [ ]  JBD2 (ext4) debugging support
  <*> Reiserfs support
       [ ]  Enable reiserfs debug mode
       [ ]  Stats in /proc/fs/reiserfs
       [*] ReserFS extended attributes
       [*]      ReiserFS POSIX Access Contorol Lists
       [*]       ReserFS Security Labels
  <*> JFS filesystem support
       [*]   JFS POSIX Access Control Lists
       [*]   JFS Security Labels
       [ ]   JFS debugging
       [*]   JFS statistics
  <*> XFS filesystem support
       [*]   XFS Quota support
       [*]   XFS POSIX ACL support
       [*]   XFS Realtime subvolume support
       [ ]   XFS Verbose Warnings
       [ ]   XFS Debugging support
  <*> GFS2 file system support
  <*> Btrfs filesystem support
       [*]  Btrfs POSIX Access Control Lists
       [ ]  Btrfs with integrity check tool compiled in (DANGERROUS) (ME
       [ ]  Btrfs will tin sanity tests upon loading
       [ ]  Btrfs debugging support
       [ ]  Btrfs assert support
       [ ]  Btrfs with the ref verify tool compiled in
  <*> NILFS2 file system support
  <*> F2FS filesystem support
       [ ]   F2FS Status Information
       [*]   F2FS extended attributes
       [*]     F2FS Access Control Lists
       [*]     F2FS Security Labels
       [ ]   F2FS consistency checking feature
       [ ]   F2FS Encryption
       [ ]   F2FS fault injection facility 
  DOS/FAT/NT Filesystems  --->
    <*> MSDOS fs support
    <*> VFAT (Windows-95) fs support
 
Pseudo Filesystems --->
    [*] /proc file system support
    [*] Tmpfs virtual memory file system support (former shm fs)

ファームウェアのインストール

emerge --ask sys-kernel/linux-firmware

fstabの設定

wiki.archlinux.jp

network設定

emerge --ask --noreplace net-misc/netifrc

以下を記載

config_eth0="dhcp"

eth0を各自のネットワークインターフェイスに書き換えて登録

root #cd /etc/init.d
root #ln -s net.lo net.eth0
root #rc-update add net.eth0 default

hostsファイルはlocalhostに関して書いてあったのでそのままで

ロケールの変更

nano -w /etc/conf.d/keymaps

keymap変数をjp106に変更

keymap="jp106"

各種システムツールのインストール

ログ関係

emerge --ask app-admin/sysklogd
rc-update add sysklogd default

cronはノートパソコンだとfcronの方がいいようなので、fcronをインストール

emerge -av fcron
rc-update add fcron default
crontab /etc/crontab

ファイルのインデックス作成ツールのインストール  

emerge --ask sys-apps/mlocate

ファイルシステム関連ツール  

emerge --ask sys-fs/e2fsprogs

DHCPクライアントのインストール  

emerge --ask net-misc/dhcpcd

Wi-Fi関連のツール  

emerge --ask net-wireless/iw net-wireless/wpa_supplicant

###GRUB2のインストール  
/etc/portage/make.confに  

GRUB_PLATFORMS="efi-64"

があることを確認  

emerge --ask sys-boot/grub:2

EFIのための処理を行う  

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=gentoo_grub /dev/sda mkdir /boot/EFI/boot cp /boot/EFI/gentoo_grub/grubx64.efi /boot/EFI/boot/bootx64.efi grub-mkconfig -o /boot/grub/grub.cfg

Macの環境構築

はじめに

中古のMacを買ったので、設定したことをメモ(コアなところ)

目次

アプリケーション

基本的にHomebrewでインストール

Homebrewのインストール

brew.sh

gcc

xcodeをインストールし、起動させるとつかえるようになるが、バージョンが古かったりする…(そういう依存いらない…)
とりあえず、Macは言語練習用として使用するため、今のままにするが今後変更する可能性がある。

Firefox

brew cask insatll firefox  

VScode

brew cask install visual-studio-code

追加したパッケージ
・8bit・・・High Contrastでは点が見にくいので
C/C++
・Janese Language Pack for Visuak Studio Code
・Nim
・zenkaku
・Hakers Haze Theme・・・ネタ

Chrome

brew cask install google-chrome

virtualbox

brew cask install virtualbox

Docker

brew cask install Docker

インストール後に

open Applications/Dpcker.app

CLI

alias関連

alias ls='ls -FG'
alias ll='ls -alFG'
alias et='exa -T'
alias ea='exa -ahl --git'

exaコマンド

brew install exa

zsh

fishのようなシンタックスハイライトであるzsh-syntax-highlighting

brew install zsh-syntax-highlighting

最後にインストール後にやる設定の指示が書いたテキストが表示されるため注意

zshの補完機能を拡張してくれるzsh-completionsの導入

brew install zsh-completions

これの設定指示はメモってたので、記載しておく

To activate these completions, add the following to your .zshrc:

  if type brew &>/dev/null; then
    FPATH=$(brew --prefix)/share/zsh/site-functions:$FPATH

    autoload -Uz compinit
    compinit
  fi

You may also need to force rebuild `zcompdump`:

  rm -f ~/.zcompdump; compinit

Additionally, if you receive "zsh compinit: insecure directories" warnings when attempting
to load these completions, you may need to run this:

  chmod go-w '/usr/local/share'

参考

guyon.hatenablog.jp

zsh compinit: insecure directoriesの対処(指示の最後を実行すれば問題ないと思う)
qiita.com

zsh側で用意されているpromptテーマを使用

autoload -U promptinit
promptinit

prompt adam2

pecoの導入

brew install peco

.zshrcに以下を追加

function select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi
    BUFFER=$(fc -l -n 1 | eval $tac | peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle -R -c
}
zle -N select-history
bindkey '^r' select-history

基本困ったら以下を見ればいいと思う

Zsh - ArchWiki

zshへの切り替え

chsh -s (which fish)

ヒストリーの記録ができていなかった問題 .zsh_historyファイルの権限の修正

chmod 744 .zsh_history

または、.zsh_historyファイルを登録

export HISTFILE="${HOME}/.zsh_history"

fishの導入

最高に楽ちんなfishもいいので入れておく

brew install fish

言語関連

Nim

curl https://nim-lang.org/choosenim/init.sh -sSf | sh

すると以下のような表示がでる

choosenim-init: Downloading choosenim-0.6.0_macosx_amd64
    Prompt: Can choosenim record and send anonymised telemetry data? [y/n]
        ... Anonymous aggregate user analytics allow us to prioritise
        ... fixes and features based on how, where and when people use Nim.
        ... For more details see: https://goo.gl/NzUEPf.
    Answer: n
Downloading Nim 1.0.6 from nim-lang.org
[##################################################] 100.0% 0kb/s
 Extracting nim-1.0.6.tar.xz
   Building Nim 1.0.6
   Building koch
   Building Nim
   Building tools (nimble, nimgrep, nimpretty, nimsuggest, testament)
  Installed component 'nim'
  Installed component 'nimble'
  Installed component 'nimgrep'
  Installed component 'nimpretty'
  Installed component 'nimsuggest'
  Installed component 'testament'
   Switched to Nim 1.0.6
choosenim-init: ChooseNim installed in /Users/<username>/.nimble/bin
choosenim-init: You must now ensure that the Nimble bin dir is in your PATH.
choosenim-init: Place the following line in the ~/.profile or ~/.bashrc file.
choosenim-init:     export PATH=/Users/<username>/.nimble/bin:$PATH

環境変数を登録します、自分はzshなの.zshrcに記載

export PATH=/Users/<username>/.nimble/bin:$PATH

30日OS自作入門30日目(Win10)

はじめに

最後…一番重いけど最後!!!

目次

高度なアプリケーション

コマンドライン計算機(harib27a)

一般の電卓というよりは、プログラマ電卓に近い感じですね

試してみると

テキストビューワ(harib27b)

MMLプレイヤ(harib27c)

画像ビューア(harib27d)

IPLの改良(harib27e)

圧縮を行うということができるようになったので20もセクタを読み込む必要がない。よって、読み込むセクタを9にするという内容のようです。
この際にsprinfをinvader.から除いているのですが、3分の1くらい減っています。sprintfってでかいんだなぁ…

実行すると

最後に

待ちに待った31日目が残ってる…たのしみじゃんよ~

30日OS自作入門29日目(Win10)

はじめに

あと二日~

目次

圧縮と簡単なアプリケーション

バグ修正(harib26a)

Windowの文字をrefleshする処理が半角対応なために、半分しか表示されていなかったようです。よって、条件分岐で全角と半角の書き換えの大きさを調整すると正しく表示されるようになるようです。

実行すると

ファイル圧縮(harib26b)

圧縮に関して考えることは

・復元+圧縮プログラムの大きさ

・どれほど圧縮できるか

で、OS内部で圧縮したファイルを処理する流れは

ファイルを置くのに必要なメモリを確保する  
↓  
ファイルのサイズが17バイト以上であれば、tek形式でないかと判断  
↓  
tek_getsizeで判定  
↓  
復元後のファイルのサイズだけメモリを確保  
↓  
復元したのち、確保したメモリの番地を返す  

という流れになっているようです。

・psizeは、sizeの値を変更したいため

・iを書き換えられることに対する対策

・nihongo.fntを圧縮ファイルに書き換えているので、処理の仕方を追加するだけでよい

・アプリに適用する際は、file_loadfile2を通すようにする

実行する

標準関数(harib26cの中に含めた)

C言語の標準ライブラリを実装するようです。自分はclibファイルを作成し、それをgo00.exeを使いライブラリ化しようかな?って感じで考えています。(できるかは試してないです)

非矩形ウィンドウ(harib26c)

透明色を255番を指定することで透明を作っているようです。これ使えば、面白いUIを作れそう
実行すると

bball(harib26d)

実行すると

インベーダーゲーム(harib26d)

ついにきちゃったよ~

実行すると、こんな感じになります!

最後に

終わりが見えてきましたね!あと少し!