Skip to content
Merged

? #18

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 7 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,23 @@

## Overview

Pygame GUI library, named after the creator of Python, Guido van Rossum, believing that this library will be the first to implement a GUI completely compatible with pygame. Included is a "mini-OS" to show off all the elements. That "mini-OS" is called *Winnux 58* (**Win**dows 9**5** + **Win**dows 9**8** + Li**nux**).

~~i kinda hate this name now~~
Pygame GUI library, named after the creator of Python, Guido van Rossum, believing that this library will be the first to implement a GUI library completely compatible with pygame. Included is a "mini-OS" to show off all the elements. It's called *Winnux 58* (**Win**dows 9**5** + **Win**dows 9**8** + Li**nux**).

## Features

- A working command line, with these *nix-style commands*:
- A working command line, with these \*nix-style commands:
- `pwd`: print working directory
- `ls`: list file and directories
- `cat`: show contents of file(s)
- `ls`: list files and directories
- `rm`: remove file(s)
- `cd`: change directory
- A command-line text editor, `vis`
- SNAKE! (with an incredibly high framerate soo good luck with that)
- A virtual disk to put programs in

Please check our [wiki](https://github.com/The-UltimateGamer/GUIdo/wiki) for more details.

## NEVER TRY TO MOUNT `files.img`
Please check our [wiki](https://github.com/The-UltimateGamer/GUIdo/wiki) for more details. There is also an offline version in the `wiki` folder of this repository.

## Directory structure:
## Directory Structure
- `/home/`

- test.txt
Expand All @@ -32,11 +29,10 @@ Please check our [wiki](https://github.com/The-UltimateGamer/GUIdo/wiki) for mor
- kernel.py
(This is where our OS boots. **DO NOT TRY TO DELETE IT.**)

## License Notice
## License Agreement

Winnux 58 is brought to you under the [GNU AGPL-3.0 License](https://www.gnu.org/licenses/agpl-3.0.en.html).

OS emulator using pygame.
Copyright (C) 2020 The-UltimateGamer & pythonleo

This program is free software: you can redistribute it and/or modify
Expand Down
Binary file modified README.pdf
Binary file not shown.
57 changes: 57 additions & 0 deletions README_zh_CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# GUIdo

## 概览

使用 pygame 的 GUI 库,名字取自 Python 的创始人,Guido van Rossum。我们相信这将会是第一个与 pygame 无缝衔接的 GUI 库。此项目包含一个”迷你操作系统“,名叫 *Winnux 58*(**Win**dows 9**5** + **Win**dows 9**8** + Li**nux**)。

## 功能

- 一个命令行,具有基本 \*nix 风格的指令:

- `pwd`:显示当前工作目录

- `cat`:显示一个或多个文件的内容

- `ls`:列出当前目录下的子目录与文件

- `rm`:删除一个或多个文件

- `cd`:改变当前目录
- 命令行编辑器 `vis`
- 贪 吃 蛇(帧率特高,祝你好运)
- 用于存储程序的虚拟磁盘

想了解更多细节,请查阅我们的 [wiki](https://github.com/The-UltimateGamer/GUIdo/wiki)。同时,本仓库的 `wiki` 目录下有离线版本。

## 文件目录

- `/home/`

- test.txt

(为了测试 `cat` 指令的实例文档)

- `/sys/`

- kernel.py

(操作系统的核心。**请不要删除它**。)

## 软件许可协议

Winnux 58 使用 [GNU Affero 通用公共许可证版本 3.0](https://www.gnu.org/licenses/agpl-3.0.en.html),请遵循其中的条款。

Copyright (C) 2020 The-UltimateGamer & pythonleo

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Binary file added README_zh_CN.pdf
Binary file not shown.
50 changes: 25 additions & 25 deletions files.img
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ from enum import Enum

width, height = 1024, 768

def pwd(working_dir, args):
def pwd(working_dir, args = None):
print(working_dir, end='\r')

def ls(working_dir, args, flag=True):
def ls(working_dir, args = None, flag = True):
files = open("files.img", 'r+', encoding="ISO-8859-1")
lines = files.read().strip('\0').split('\n')

Expand All @@ -26,9 +26,9 @@ def ls(working_dir, args, flag=True):
result.append(lines[i + 1].strip('!FNAME='))
return result

def cat(working_dir, args):
def cat(working_dir, args = None):
if not args:
print("Missing argument.\rUsage: cat <filename(s)>", end='\r')
print("cat: missing argument.\rUsage: cat <filename(s)>", end='\r')
return
for target in args:
files = open("files.img", 'r+', encoding="ISO-8859-1")
Expand All @@ -42,11 +42,14 @@ def cat(working_dir, args):
contents.append(lines[i])
break
else:
print("cat: %s: no such file" % target, end = '\r')
print('\r'.join(contents))
print("cat: %s: no such file." % target, end = '\r')
print('\r'.join(contents), end='\r')
files.close()

def rm(working_dir, args):
def rm(working_dir, args = None):
if not args:
print("rm: missing argument.\rUsage: rm <filename(s)>", end='\r')
return
files = open("files.img", 'r+', encoding="ISO-8859-1")
to_be_written = []
target = args[0]
Expand Down Expand Up @@ -123,7 +126,6 @@ class Kernel:
self.dialogs[self.dialogID].mouseDown(pos, button)
except:
pass
print(event.pos)
def mouseUp(self, pos, button):
self.apps[self.appID].mouseUp(pos, button)
def mouseMotion(self, pos):
Expand Down Expand Up @@ -270,7 +272,6 @@ class TxtField:

def wrap(self, txtBuffer):
self.frame += 1
self.frame %= 60
lines = []
ptr = 0
prev_i = 0
Expand Down Expand Up @@ -304,7 +305,7 @@ class TxtField:
screen.blit(img, (self.x, y))
y += 16

if self.frame <= 30: self.cursor.image.fill(pygame.Color(252, 252, 252))
if self.frame % 50 <= 25: self.cursor.image.fill(pygame.Color(252, 252, 252))
else: self.cursor.image.fill(pygame.Color(0, 0, 0))

lines = self.txtBuffer.count('\r') + self.txtBuffer.count('\n')
Expand All @@ -313,7 +314,7 @@ class TxtField:
self.cursor.rect.center = (self.x + (self.loc + (len(self.pwd) if not self.isVis else -2) + 1) * 9 + 8,
self.y + lines * 16 + 8)
screen.blit(self.cursor.image, self.cursor.rect)
def cd(self, dir_name):
def cd(self, dir_name = None):
def process_dir(dr: str):
for d in dr.split('/'):
if d:
Expand Down Expand Up @@ -343,7 +344,7 @@ class TxtField:
self.pwd = '/'
dir_name = dir_name[1:]
process_dir(dir_name)
def vis(self, args):
def vis(self, args = None):
self.isVis = True
if not args:
print("vis: missing argument.\rUsage: vis <filename>", end='\r')
Expand All @@ -364,11 +365,11 @@ class TxtField:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
self.loc = 0
flg = False
break
self.keyDown(event.key, True)
files.write(self.cLineStr)
framework.launch()
elif event.type == pygame.KEYUP:
if event.key in (pygame.K_LSHIFT, pygame.K_RSHIFT):
self.shift = False
Expand All @@ -377,8 +378,7 @@ class TxtField:
elif event.type == pygame.QUIT:
pygame.quit()
sys.exit()
framework.launch()
self.frame += 1
framework.launch()
files.close()
self.isVis = False

Expand All @@ -389,15 +389,18 @@ class TxtField:
output = io.StringIO()
with redirect_stdout(output):
if main:
if main == 'cd': self.cd(cmd[0])
elif main == 'vis': self.vis(cmd[0])
if main == "cd":
try: self.cd(cmd[0])
except: print("cd: missing argument.\rUsage: cd <dirname>", end='\r')
elif main == "vis":
try: self.vis(cmd[0])
except: print("vis: missing argument.\rUsage: vis <filename>", end='\r')
else:
try: exec("%s('%s', %s)" % (main, self.pwd, str(cmd)))
except: print("%s: command not found" % on_scr, end='')
except: print("%s: command not found" % on_scr, end='\r')
else: pass
self.txtBuffer.append('\r')
self.txtBuffer += list(output.getvalue().rstrip('\n'))
print(output.getvalue())
self.placeholder.append('%s# ' % self.pwd)
def keyUp(self, key):
if key == pygame.K_LSHIFT or key == pygame.K_RSHIFT:
Expand Down Expand Up @@ -440,7 +443,6 @@ class TxtField:
else:
self.exec_cmd(cmd)
self.txtBuffer.append('\n')
framework.launch()
elif key == pygame.K_TAB:
for _ in range(4):
self.txtBuffer.append(' ')
Expand All @@ -463,10 +465,8 @@ class TxtField:
self.txtBuffer.insert(self.loc + self.currentLine, self.caps[chr(key)])
else:
self.txtBuffer.insert(self.loc + self.currentLine, chr(key))
self.loc += 1
self.maxIndex += 1

framework.launch()
self.loc += 1
self.maxIndex += 1

class Secret:
def __init__(self, rect, dialogID):
Expand Down Expand Up @@ -609,4 +609,4 @@ If you're seeing this, then the `cat` command is working!
!FNAME=sys/

!LOC=/
!FNAME=home/
!FNAME=home/
3 changes: 2 additions & 1 deletion stub.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
kernel.append(dsk_spl[j])
break

exec('\n'.join(kernel))
try: exec('\n'.join(kernel))
except: pass

img.close()
15 changes: 7 additions & 8 deletions wiki/FAQ.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# FAQ

## What do I need?

You will need:
- A working Python interpreter, version 3 and up
- The [pygame module](pygame.org) installed
Expand All @@ -8,13 +11,9 @@ Run `stub.py` either by double-clicking on it (in Windows) or using the command

## FAQ for `vis`
### How do I use `vis`?
When you open it up through the virtual terminal, you will be put in *input mode*, which means whatever you type will be written into the file. `vis` is a *line-based* editor, meaning you can only edit the line you're on.<br>
Enter `vis <filename>` to start editing a file. Press Enter whenever you have finished editing a line. The line will be immediately saved and cannot be altered again in this editing session. Press Esc to exit `vis`.
When you open it up through the virtual terminal, you will be put in *input mode*, which means whatever you type will be written into the file. `vis` is a *line-based* editor, meaning you can only edit the line you're on.

### Where do the files go?
Everything you created in Winnux 58 will go into the `files.img` *virtual disk*. You can view them using the `cat` command in the virtual terminal. Note that `files.img` is NOT a traditional disk image, so don't try to mount that!
Enter `vis <filename>` to start editing a file. Press <kbd>Enter</kbd> whenever you have finished editing a line. The line will be immediately saved and cannot be altered again in this editing session. Press <kbd>Esc</kbd> to exit `vis`.

## Known issues
<ul>
<li>The cursor behaves strangely in vis. It does not update regularly anymore, but rather updates at every event.</li>
</ul>
### Where do the files go?
Everything you created in Winnux 58 will go into the `files.img` *virtual disk*. You can view them using the `cat` command in the virtual terminal. Note that `files.img` is **NOT** a traditional disk image, so don't try to mount that!
Binary file modified wiki/FAQ.pdf
Binary file not shown.
24 changes: 24 additions & 0 deletions wiki/FAQ_zh_CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# FAQ

## 我需要什么?

您将会需要:

- 一个 Python 解释器,版本 3 及以上
- [pygame](pygame.org) 模块

## 我如何运行此程序?

运行 `stub.py`。您可以使用命令行或者(在 Windows 系统下)双击文件。

## `vis` 程序 FAQ

### 我如何使用 `vis`?

当您打开 `vis` 时,您会进入*输入模式*,这代表您所输入的全部内容将会写入文件。`vis` 是一个*行编辑器*,这代表着您只能更改当前行的内容(后文将加以解释)。

使用 `vis <文件名>` 来开始输入文本。当您完成输入一行文字时,请按 <kbd>Enter</kbd> 键。这行文本将会被直接保存且您不能再修改它。要退出 `vis`,请按 <kbd>Esc</kbd> 键。

### 我的文件被存到了哪里?

您在 Winnux 58 中创建的所有内容都储存在 `files.img` *虚拟磁盘*里。您可以在虚拟命令行中使用 `cat` 命令查看文件内容。要注意的是,`files.img` **并不是**传统的磁盘映像,所以请勿装载它!
Binary file added wiki/FAQ_zh_CN.pdf
Binary file not shown.