From 52ab5d904e307e92fc6c323e1834bb0dbc432dcd Mon Sep 17 00:00:00 2001 From: login Date: Sun, 2 Apr 2023 18:52:00 +0800 Subject: [PATCH] =?UTF-8?q?V0.1.6=E5=8F=91=E8=A1=8C=E6=97=A5=E5=BF=97&?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9E=84=E5=BB=BA=E7=B3=BB=E7=BB=9F=E6=96=87?= =?UTF-8?q?=E6=A1=A3=20(#225)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.更新构建系统文档 2.V0.1.6发行日志 --- docs/community/ChangeLog/V0.1.x/V0.1.6.md | 306 ++++++++++++++++++++++ docs/community/ChangeLog/index.rst | 1 + docs/introduction/build_system.md | 117 ++++----- docs/introduction/features.md | 10 +- tools/bootstrap.sh | 7 +- user/apps/about/about.c | 2 +- 6 files changed, 373 insertions(+), 70 deletions(-) create mode 100644 docs/community/ChangeLog/V0.1.x/V0.1.6.md diff --git a/docs/community/ChangeLog/V0.1.x/V0.1.6.md b/docs/community/ChangeLog/V0.1.x/V0.1.6.md new file mode 100644 index 00000000..6d9a159c --- /dev/null +++ b/docs/community/ChangeLog/V0.1.x/V0.1.6.md @@ -0,0 +1,306 @@ +# V0.1.5 + +:::{note} +本文作者:龙进 + +2023年4月2日 +::: + +## 贡献者名单 + +DragonOS V0.1.6版本由以下小伙伴贡献代码: + +- 龙进 +- 关锦权 +- 苏琎韬 +- 侯嘉滢 +- 吴宇健 +- Mork <91721145+MorkCarpenter@users.noreply.github.com> +- WaferJay <17383312+WaferJay@users.noreply.github.com> +- HoshuChiu <129569557+HoshuChiu@users.noreply.github.com> + +## 赞助者名单 + +感谢以下同学的赞赏,我们将不断努力! + +- 万晓兰 +- David Wen +- [Seele.Clover](https://github.com/seeleclover) +- [FindWangHao](https://github.com/FindWangHao) +- 叶锦毅 +- 林 +- Albert +- [TerryLeeSCUT · GitHub](https://github.com/TerryLeeSCUT) +- slientbard +- 悟 +- 匿名热心人士 + +## 更新内容-内核 + +- softirq: 重构了软中断 (#223) +- timer: 重构了系统定时器 (#223) +- stdio: 新增tty设备,用于标准输入输出 (#202) (#217) +- lib: 第一套键盘扫描码的状态机 (#216) (#219) +- syscall: 新增dup,dup2系统调用 (#224) +- syscall: 新增SystemError枚举类型,使得错误处理更清晰 (#205) +- driver: 新增x87浮点处理器支持 (#212) +- driver: VirtIO网卡能够正常发送、接收数据 (#204) +- filesystem: 修正了FAT32判断逻辑,解决了文件系统为FAT12/16时系统无法正常启动的问题。 (#211) +- filesystem: 新增VFS文档,以及修改文档配置 (#209) +- textui: 修复由于textui加锁,更改了preempt_count导致“进程长时间连续输出字符”的情况下,进程调度器不运行的问题。 (#203) +- scheduler: 解决由于在中断上下文以外,sched_enqueue时,未关中断导致cpu_queue双重加锁的问题 (#201) + + +## 更新内容-用户环境 + +### 新增仓库 + +- 新增子项目:[dsc](https://github.com/DragonOS-Community/dsc.git) +- 移植relibc: [DragonOS-relibc](https://github.com/DragonOS-Community/relibc.git) + +## 更新内容-其他 + +- build: 添加了qemu使用VNC作为图像输出的选项 (#222) + +## 更新内容-软件移植 + +无 + +## 源码、发布版镜像下载 + +  您可以通过以下方式获得源代码: + +### 通过Git获取 + +- 您可以访问[https://github.com/DragonOS-Community/DragonOS/releases](https://github.com/DragonOS-Community/DragonOS/releases)下载发布版的代码,以及编译好的,可运行的磁盘镜像。 +- 我们在gitee上也有镜像仓库可供下载:[https://gitee.com/DragonOS/DragonOS](https://gitee.com/DragonOS/DragonOS) + +### 通过DragonOS软件镜像站获取 + +  为解决国内访问GitHub慢、不稳定的问题,同时为了方便开发者们下载DragonOS的每个版本的代码,我们特意搭建了镜像站,您可以通过以下地址访问镜像站: + +  您可以通过镜像站获取到DragonOS的代码压缩包,以及编译好的可运行的磁盘镜像。 + +- [https://mirrors.DragonOS.org](https://mirrors.DragonOS.org) +- [https://mirrors.DragonOS.org.cn](https://mirrors.DragonOS.org.cn) +- 国内镜像加速: [https://mirrors.ringotek.cn/] (https://mirrors.ringotek.cn/) + +## 开放源代码声明 + + +:::{note} +为促进DragonOS项目的健康发展,DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品(包括但不限于二进制副本、文档)的人,都能享有我们通过GPLv2协议授予您的权利,同时您也需要遵守协议中规定的义务。 + +这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。 + +对于大部分的善意的人们而言,您不会违反我们的开源协议。 + +我们鼓励DragonOS的自由传播、推广,但是请确保所有行为没有侵犯他人的合法权益,也没有违反GPLv2协议。 + +请特别注意,对于违反开源协议的,尤其是**商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责**。(这是最容易违反我们的开源协议的场景)。 + +并且,请注意,按照GPLv2协议的要求,基于DragonOS修改或二次开发的软件,必须同样采用GPLv2协议开源,并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。 + +您必须使得DragonOS的开发者们,能够以同样的方式,从公开渠道获取到您二次开发的版本的源代码,否则您将违反GPLv2协议。 + +关于协议详细内容,还敬请您请阅读项目根目录下的**LICENSE**文件。请注意,按照GPLv2协议的要求,**只有英文原版才具有法律效力**。任何翻译版本都仅供参考。 +::: + +### 开源软件使用情况 + +  DragonOS在开发的过程中,参考了一些开源项目的设计,或者引入了他们的部分代码,亦或是受到了他们的启发。现将他们列在下面。我们对这些开源项目的贡献者们致以最衷心的感谢! + +格式:<项目名> - <链接> - <开源协议> + +- Linux - https://git.kernel.org/ - GPLv2 +- skiftOS - https://github.com/skiftOS/skift - MIT +- FYSOS - https://github.com/fysnet/FYSOS - [FYSOS' License](https://github.com/fysnet/FYSOS/blob/9a8968e3d6600de34539c028c843f4c06d134039/license.txt) +- LemonOS - https://github.com/LemonOSProject/LemonOS.git - BSD 2-Clause License +- LZ4 - https://github.com/lz4/lz4 - BSD 2-Clause license +- SerenityOS - https://github.com/SerenityOS/serenity.git - BSD 2-Clause license +- MINE - 《一个64位操作系统的设计与实现》田宇; 人民邮电出版社 +- chcore - 《现代操作系统:设计与实现》陈海波,夏虞斌; 机械工业出版社 +- SimpleKernel - https://github.com/Simple-XX/SimpleKernel - MIT +- rcore-fs - https://github.com/rcore-os/rcore-fs.git - MIT +- redox - https://gitlab.redox-os.org/redox-os/redox - MIT + +## 当前版本的所有提交记录 + +```text +commit bacd691c9ef0502b5cc618aad50517f9e59df5e0 +Author: login +Date: Sun Apr 2 17:09:33 2023 +0800 + + 软中断&定时器重构 (#223) + + * 软中断&定时器重构 + + Co-authored-by: houmkh + + * 修改timer的clock() + + * 删除debug信息 + + --------- + + Co-authored-by: houmkh <1119644616@qq.com> + +commit 6d345b774223b0daaf0ee629c7fb595a1912a9e2 +Author: HoshuChiu <129569557+HoshuChiu@users.noreply.github.com> +Date: Sun Apr 2 15:55:24 2023 +0800 + + 添加了qemu使用VNC作为图像输出的选项 (#222) + + * 添加了qemu使用VNC作为图像输出的选项 + + * 设置vnc端口为5900 + + --------- + + Co-authored-by: longjin + +commit 2b771e32f5795e0fdda458e3bb2651ef6b9673ac +Author: Gou Ngai +Date: Sun Apr 2 15:43:53 2023 +0800 + + Add dup,dup2 (#224) + + * dup,dup2 + + * fix: sys_dup2语义与posix不一致的问题 + + --------- + + Co-authored-by: longjin + +commit d7b31a969ff091224a4929496f0278d024f78c77 +Author: Gou Ngai +Date: Fri Mar 31 18:23:58 2023 +0800 + + Patch keyboard capslock alt (#219) + + * keyboard-alt-capslock + + * 解决键盘输入'%'字符的时候无法回显的bug + + --------- + + Co-authored-by: longjin + +commit 20e3152e1eea97f87d644c3023391e172bc83c93 +Author: login +Date: Fri Mar 31 12:54:37 2023 +0800 + + 将TTY与stdio进行连接,实现基本的stdio功能 (#217) + + * 将stdio与tty接上 + +commit 5fb12ce447710edf8566f250655a06cb27519fca +Author: Gou Ngai +Date: Thu Mar 30 18:19:02 2023 +0800 + + 第一套键盘扫描码的状态机 (#216) + + 第一套键盘扫描码的状态机 + --------- + + Co-authored-by: guanjinquan <1666320330@qq.com> + Co-authored-by: longjin + +commit 676b8ef62e1a0a1e52d65b40c53c1636a2954040 +Author: Mork <91721145+MorkCarpenter@users.noreply.github.com> +Date: Wed Mar 29 21:24:11 2023 +0800 + + 部分函数从返回值为Result<<>,i32>修改为Result<<>,SystemError> (#210) + + * 将Result<<>,i32>替换为Result<<>,SystemError> + * bugfix: 显示双缓冲区初始化的时候,连续注册了两次Video Softirq的问题。 + + Co-authored-by: longjin + +commit 64aea4b3494bee7375e1c1ee5739c9fab0db0cb7 +Author: Gou Ngai +Date: Tue Mar 28 20:44:26 2023 +0800 + + 增加x87FPU支持 (#212) + + * remove `ret_from_syscall` + *修复ps2键盘驱动程序inode在进程fork的时候导致死锁的问题. + *更新: VFS每次拷贝文件描述符的时候,都会去调用inode的open函数 + + --------- + + Co-authored-by: longjin + +commit 2286eda6526ed1b46afd79b47dc701034b9e903d +Author: WaferJay <17383312+WaferJay@users.noreply.github.com> +Date: Mon Mar 27 09:32:43 2023 +0800 + + 修正了FAT32判断逻辑,解决了文件系统为FAT12/16时系统无法正常启动的问题。 (#211) + + * fix(fat): fix determination of fat type casue crash if fs is fat12/16 + + * refactor(fat): split BiosParameterBlock.validate() into BiosParameterBlockFAT32.validate() and BiosParameterBlockLegacy.validate() + + * 调整“最大允许的簇号”的常量放置的位置。 + + --------- + + Co-authored-by: longjin + +commit 45b8371173b070028457f7ee64be33f68b4f9ada +Author: login +Date: Sat Mar 25 14:51:16 2023 +0800 + + 新增VFS文档,以及修改文档配置 (#209) + + * 1.新增vfs设计文档 + 2.修改文档版权标志为"2022-2023, DragonOS Community" + 3.修改电脑版文档页面的宽度为90% + + * layout.html末尾加空行 + +commit 73c607aaddf6e4634cad179a81d3f1bc589f7220 +Author: YJwu2023 <119829947+YJwu2023@users.noreply.github.com> +Date: Sat Mar 18 20:43:37 2023 +0800 + + VirtIO网卡能够正常发送、接收数据 (#204) + + * virtio-net小修改 + + * 移动volatile.rs到libs文件夹 + + * 使用virtio-drivers 0.3.0 + + * bugfix: 初始化BAR之后,未正确设置command register的问题 + + + --------- + + Co-authored-by: longjin + +commit 4454d1a2dd1f1078750151c028a794cfd9a04a1b +Author: login +Date: Sat Mar 18 20:26:05 2023 +0800 + + 新增SystemError枚举类型,使得错误处理更清晰 (#205) + +commit 0d48c3c9c21a2dd470d0e1e58b507db60e0887bb +Author: login +Date: Thu Mar 16 19:48:59 2023 +0800 + + new: tty设备(尚未与stdio接上) (#202) + +commit 790d45764090bce3bbfb96b42b2818100a8cef9a +Author: login +Date: Wed Mar 15 11:42:41 2023 +0800 + + 修复由于textui加锁,更改了preempt_count导致“进程长时间连续输出字符”的情况下,进程调度器不运行的问题。 (#203) + +commit c2e757d8cbeed01b16f48bea48ed8447685e6f1a +Author: login +Date: Mon Mar 13 22:22:23 2023 +0800 + + 解决由于在中断上下文以外,sched_enqueue时,未关中断导致cpu_queue双重加锁的问题 (#201) + +``` \ No newline at end of file diff --git a/docs/community/ChangeLog/index.rst b/docs/community/ChangeLog/index.rst index 050626ab..026b8fcd 100644 --- a/docs/community/ChangeLog/index.rst +++ b/docs/community/ChangeLog/index.rst @@ -6,6 +6,7 @@ .. toctree:: :maxdepth: 1 + V0.1.x/V0.1.6 V0.1.x/V0.1.5 V0.1.x/V0.1.4 V0.1.x/V0.1.3 diff --git a/docs/introduction/build_system.md b/docs/introduction/build_system.md index f3774d0b..61019acc 100644 --- a/docs/introduction/build_system.md +++ b/docs/introduction/build_system.md @@ -9,7 +9,26 @@   对于Linux发行版,建议使用Ubuntu22、Debian、Arch Linux这样的,仓库软件版本较新的发行版,这能为您减少很多麻烦。 -### 使用一键初始化脚本进行安装 +### 1.1 下载DragonOS的源代码 + +  假设您的计算机上已经安装了git,您可以通过以下命令,获得DragonOS的最新的源代码: + +```shell +git clone https://github.com/DragonOS-Community/DragonOS +cd DragonOS +``` + +:::{warning} +DragonOS的源代码托管在Github上,但是,由于Github在国内的访问速度较慢,因此,我们建议您在github上绑定您的电脑的**ssh公钥**, +然后通过以下命令来克隆代码,防止频繁出现git clone、pull、push失败的情况。 + +```shell +git clone git@github.com:DragonOS-Community/DragonOS.git +``` +::: + +## 2.使用一键初始化脚本进行安装(推荐) +   我们提供了一键初始化脚本,可以一键安装,只需要在控制台运行以下命令: @@ -26,20 +45,27 @@ bash bootstrap.sh # 这里请不要加上sudo, 因为需要安装的开发依 欢迎您为其他的系统完善构建脚本! ::: -**如果一键初始化脚本能够正常运行,并输出最终的“祝贺”界面(如下所示),那么恭喜你,可以直接跳到{ref}`这里 <_get_dragonos_source_code>`进行阅读!** +**如果一键初始化脚本能够正常运行,并输出最终的“祝贺”界面(如下所示),请关闭当前终端,然后重新打开。** + ```shell |-----------Congratulations!---------------| | | | 你成功安装了DragonOS所需的依赖项! | -| 您可以通过以下命令运行它: | | | -| make run-docker -j 你的cpu核心数 | +| 请关闭当前终端, 并重新打开一个终端 | +| 然后通过以下命令运行: | +| | +| make run | | | |------------------------------------------| ``` -### 依赖清单(手动安装) +**接着,请直接跳到{ref}`编译命令讲解 <_build_system_command>`进行阅读!** + +## 3.手动安装 + +### 3.1 依赖清单   如果自动安装脚本不能支持您的操作系统,那么您需要手动安装依赖程序。以下是依赖项的清单: @@ -84,13 +110,13 @@ sudo make install 请注意,编译安装的QEMU,将通过VNC模式进行链接,因此,您还需要在您的计算机上安装VNC viewer以连接至QEMU虚拟机。 ::: -### 安装Docker +### 3.2 安装Docker   您可以在docker官网下载安装docker-ce. > 详细信息请转到: [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/) -### 安装Rust +### 3.3 安装Rust :::{warning} **【常见误区】**:如果您打算采用docker进行编译,尽管docker镜像中已经安装了Rust编译环境,但是,为了能够在VSCode中使用Rust-Analyzer进行代码提示,以及`make clean`命令能正常运行,您的客户机上仍然需要安装rust环境。 @@ -129,44 +155,18 @@ rustup target add x86_64-unknown-none # Rust安装完成 ``` -### 解决KVM权限问题 - -  在部分计算机上,可能由于权限问题而无法启动虚拟机,我们可以通过把当前用户加到kvm用户组的方式,解决该问题: - -```shell -# 解决kvm权限问题 -USR=$USER -sudo adduser $USR kvm -sudo chown $USR /dev/kvm -``` - -(_get_dragonos_source_code)= -### 下载DragonOS的源代码 - -  假设您的计算机上已经安装了git,您可以通过以下命令,获得DragonOS的最新的源代码: - -```shell -git clone https://github.com/DragonOS-Community/DragonOS -cd DragonOS -``` - **至此,公共依赖项已经安装完成,您可以根据自己的需要,阅读后续章节** -## 2.从Docker构建(推荐) +**关于编译命令的用法,请见:{ref}`编译命令讲解 <_build_system_command>`** -  为减轻配置环境的负担,DragonOS发布了一个Docker编译环境,便于开发者运行DragonOS。我们强烈建议您采用这种方式来运行DragonOS。 +## 4.从Docker构建(不推荐) + +  DragonOS发布了一个Docker编译环境,便于开发者运行DragonOS。但是,由于编码过程仍需要在客户机上进行,因此,您需要在客户机上安装Rust编译环境。   本节假设以下操作均在Linux下进行。 -### 获取DragonOS编译镜像 -  当您成功安装了docker之后,您可以通过以下命令,下载DragonOS的编译镜像: - -```shell -docker pull dragonos/dragonos-dev:v1.1.0-beta3 -``` - -### 安装qemu虚拟机 +### 4.1 安装qemu虚拟机   在本节中,我们建议您采用命令行安装qemu: @@ -174,7 +174,7 @@ docker pull dragonos/dragonos-dev:v1.1.0-beta3 sudo apt install -y qemu qemu-system qemu-kvm ``` -### 创建磁盘镜像 +### 4.2 创建磁盘镜像   首先,您需要使用tools文件夹下的create_hdd_image.sh,创建一块虚拟磁盘镜像。您需要在tools文件夹下运行此命令。 @@ -182,7 +182,7 @@ sudo apt install -y qemu qemu-system qemu-kvm bash create_hdd_image.sh ``` -### 运行DragonOS +### 4.3 运行DragonOS   如果不出意外的话,这将是运行DragonOS的最后一步。您只需要在DragonOS的根目录下方,执行以下命令,即可运行DragonOS。 @@ -195,36 +195,21 @@ make run-docker   在qemu虚拟机被启动后,我们需要在控制台输入字母`c`,然后回车。这样,虚拟机就会开始执行。 :::{note} -(1) 首次编译时,由于需要下载Rust相关的索引(几百MB大小),因此需要一定的时间,请耐心等候! -(2) 输入命令可能需要加上sudo +1. 首次编译时,由于需要下载Rust相关的索引(几百MB大小),因此需要一定的时间,请耐心等候! +2. 输入命令可能需要加上sudo ::: **关于编译命令的用法,请见:{ref}`编译命令讲解 <_build_system_command>`** -## 3.在本机中直接编译 +## 5.其他注意事项 -  若您追求快速的编译速度,以及完整的开发调试支持,且愿意花费半个小时来配置开发环境的话,该小节的内容能帮助到您。 +### 5.1 创建磁盘镜像 -### 软件依赖 - -  您需要通过以下命令,获取您本机安装的Grub的版本: - -```shell -grub-install --version -``` - -  **如果显示的版本号为2.06及以上,且您已经按照第一小节中的内容,安装相关的依赖,那么,恭喜您,您可以直接在本机编译DragonOS!** - -  否则,您需要编译安装Grub-2.06。它的源代码可以通过[https://ftp.gnu.org/gnu/grub/grub-2.06.tar.gz](https://ftp.gnu.org/gnu/grub/grub-2.06.tar.gz)获得。 - -- grub 2.06 (不必使用sudo权限进行install) - -### 创建磁盘镜像 - -  首先,您需要使用`sudo`权限运行`tools/create_hdd_image.sh`,为DragonOS创建一块磁盘镜像文件。该脚本会自动完成创建磁盘镜像的工作,并将其移动到`bin/`目录下。 +  首先,您需要使用**普通用户**权限运行`tools/create_hdd_image.sh`,为DragonOS创建一块磁盘镜像文件。该脚本会自动完成创建磁盘镜像的工作,并将其移动到`bin/`目录下。 +  请注意,由于权限问题,请务必使用**普通用户**权限运行此脚本。(运行后,需要提升权限时,系统可能会要求您输入密码) -### 编译、运行DragonOS +### 5.2 编译、运行DragonOS 1. 安装编译及运行环境 2. 进入DragonOS文件夹 @@ -240,11 +225,15 @@ grub-install --version **关于编译命令的用法,请见:{ref}`编译命令讲解 <_build_system_command>`** (_build_system_command)= -## 4.编译命令讲解 +## 6.编译命令讲解 - 本地编译,不运行: `make all -j 您的CPU核心数` - 本地编译,并写入磁盘镜像,不运行: `make build` - 本地编译,写入磁盘镜像,并在QEMU中运行: `make run` - Docker编译,并写入磁盘镜像,: `make docker` - Docker编译,写入磁盘镜像,并在QEMU中运行: `make run-docker` -- 不编译,直接从已有的磁盘镜像启动: `make qemu` \ No newline at end of file +- 不编译,直接从已有的磁盘镜像启动: `make qemu` + +:::{note} +如果您需要在vnc中运行DragonOS,请在上述命令后加上`-vnc`后缀。如:`make run-vnc` +::: \ No newline at end of file diff --git a/docs/introduction/features.md b/docs/introduction/features.md index cdd2069c..e61ad879 100644 --- a/docs/introduction/features.md +++ b/docs/introduction/features.md @@ -53,9 +53,10 @@ ### 文件系统 - [x] VFS -- [x] fat32 -- [x] devfs -- [x] rootfs +- [x] fat12/16/32 +- [x] Devfs +- [x] RamFS +- [x] procfs ### 异常及中断处理 @@ -103,6 +104,9 @@ - [x] local apic定时器 - [x] UART串口 - [x] VBE显示 +- [x] VirtIO网卡 +- [x] x87FPU +- [x] TTY终端 ## 用户层 diff --git a/tools/bootstrap.sh b/tools/bootstrap.sh index bac33b7a..ad38a2cb 100644 --- a/tools/bootstrap.sh +++ b/tools/bootstrap.sh @@ -17,13 +17,16 @@ congratulations() echo "|-----------Congratulations!---------------|" echo "| |" echo "| 你成功安装了DragonOS所需的依赖项! |" - echo "| 您可以通过以下命令运行它: |" + echo "| |" + echo "| 请关闭当前终端, 并重新打开一个终端 |" + echo "| 然后通过以下命令运行: |" echo "| |" - echo "| make run-docker -j 你的cpu核心数 |" + echo "| make run |" echo "| |" echo "|------------------------------------------|" } + #################################### # 当检测到ubuntu或Debian时,执行此函数 # # 参数:第一个参数为包管理器 # diff --git a/user/apps/about/about.c b/user/apps/about/about.c index bdc6a684..3daa9ed9 100644 --- a/user/apps/about/about.c +++ b/user/apps/about/about.c @@ -18,7 +18,7 @@ void print_copyright() printf(" DragonOS - An opensource operating system.\n"); printf(" Copyright: fslongjin & DragonOS Community. 2022, All rights reserved.\n"); printf(" Version: "); - put_string("V0.1.5\n", COLOR_GREEN, COLOR_BLACK); + put_string("V0.1.6\n", COLOR_GREEN, COLOR_BLACK); printf(" Git commit SHA1: %s\n", DRAGONOS_GIT_COMMIT_SHA1); printf(" Build time: %s %s\n", __DATE__, __TIME__); printf(" \nYou can visit the project via:\n");