Commit 0834afab authored by Ercan Ersoy's avatar Ercan Ersoy

Commit of release verison 0.3

Relicense FreeDOS TUI Shell double license of
GNU GPLv2 and GNU GPLv3. Change READMEs.
parent bd65fed2
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -8,7 +8,7 @@ Copyright (C) 2018 Ercan Ersoy<br /> ...@@ -8,7 +8,7 @@ Copyright (C) 2018 Ercan Ersoy<br />
This program is licensed under GNU General Public License version 3. This program is licensed under GNU General Public License version 3.
This project includes FDOSTUI library. FDOSTUI has own licenses.<br /> This project includes FDOSTUI library. FDOSTUI has own licenses.<br />
This project includes Kitten library. Kitten has own licenses. This project includes Kitten library. Kitten has own license.
# Thanks # Thanks
...@@ -33,6 +33,48 @@ make a pull request to the FreeDOS TUI Shell repository. ...@@ -33,6 +33,48 @@ make a pull request to the FreeDOS TUI Shell repository.
# Changelog # Changelog
**0.2 (09-24-2018):** Disabled menuitem foreground color have changed to grey on "FDOSTUI.INI". But, it seems red. (Possible another bug.) Changed default is showing archive items to enabled and showing readonly items to enabled. Fixed popup input of run command not cancelling bug. Add pause to ending to running command. Fixed newline bug of some files. ## 0.3 (12-09-2018)
**0.1 (07-13-2018):** Create first version. * Changed color theme.
* Changed bar menus.
* Changed language files.
* Deleted unneded line of "DOSSHELL.FR".
* Fixed "Show Archive Items" checkbox and fixed "Show Hidden Items" checkbox on file manager.
* Disabled ESC key.
* Changed directory tree.
* Fixed some typos.
* Fixed drivers listbox selecting with keyboard bug.
* Fixed item attributes not shown with changing drive and file manager opening.
* Splitted header files and source files.
* Fix help parameter.
* Changed header files extensions to ".hpp" from ".h".
* Replaced clearing screen to standard function of Open Watcom instead of CLS command.
* Added GNU GPL version 2 license information.
## 0.2 (09-24-2018)
* Disabled menuitem foreground color have changed to grey on "FDOSTUI.INI". But, it seems red. (Possible another bug.)
* Changed default is showing archive items to enabled and showing readonly items to enabled.
* Fixed popup input of run command not cancelling bug. Add pause to ending to running command.
* Fixed newline bug of some files.
## 0.1 (07-13-2018)
* Create first version.
...@@ -3,9 +3,11 @@ FreeDOS TUI Shell ...@@ -3,9 +3,11 @@ FreeDOS TUI Shell
Text User Interface Shell for FreeDOS Text User Interface Shell for FreeDOS
Copyright (C) 2018 Ercan Ersoy Copyright (C) 2018 Ercan Ersoy
This program is free software. (GNU General Public License version 3) This program is free software. (GNU General Public License version 2)
(GNU General Public License version 3)
This project includes FDOSTUI library. FDOSTUI has own licenses. This project includes FDOSTUI library. FDOSTUI has own licenses.
This project includes Kitten library. Kitten has own license.
Thanks: Thanks:
...@@ -21,16 +23,54 @@ Compile: ...@@ -21,16 +23,54 @@ Compile:
Contribute: Contribute:
If you want to contribute to this project, you can make a pull request to the If you want to contribute to this project, you can report possible bugs and
FreeDOS TUI Shell repository. make a pull request to the FreeDOS TUI Shell repository.
Changelog: Changelog:
0.3 (12-09-2018): Changed color theme.
Changed bar menus.
Changed language files.
Deleted unneded line of "DOSSHELL.FR".
Fixed "Show Archive Items" checkbox and fixed "Show Hidden
Items" checkbox on file manager.
Disabled ESC key.
Changed directory tree.
Fixed some typos.
Fixed drivers listbox selecting with keyboard bug.
Fixed item attributes not shown with changing drive and
file manager opening.
Splitted header files and source files.
Fix help parameter.
Changed header files extensions to ".hpp" from ".h".
Replaced clearing screen to standard function of Open
Watcom instead of CLS command.
Added GNU GPL version 2 license information.
0.2 (09-24-2018): Disabled menuitem foreground color have changed to grey on 0.2 (09-24-2018): Disabled menuitem foreground color have changed to grey on
"FDOSTUI.INI". But, it seems red. (Possible another "FDOSTUI.INI". But, it seems red. (Possible another
bug.) Changed default is showing archive items to enabled bug.)
and showing readonly items to enabled. Fixed popup input
of run command not cancelling bug. Add pause to ending to Changed default is showing archive items to enabled
running command. Fixed newline bug of some files. and showing readonly items to enabled.
Fixed popup input of run command not cancelling bug.
Add pause to ending to running command. Fixed newline bug
of some files.
0.1 (07-13-2018): Create first version. 0.1 (07-13-2018): Create first version.
...@@ -3,10 +3,11 @@ FreeDOS TUI Shell ...@@ -3,10 +3,11 @@ FreeDOS TUI Shell
FreeDOS iin metin kullanc arayz kabuu FreeDOS iin metin kullanc arayz kabuu
Telif Hakk (C) 2018 Ercan Ersoy Telif Hakk (C) 2018 Ercan Ersoy
Bu program bir ”zgr yazlmdr. (GNU Genel Kamu Lisans 3. srm) Bu program bir zgr yazlmdr. (GNU Genel Kamu Lisans 2. srm)
(GNU Genel Kamu Lisans 3. srm)
Bu tasar FDOSTUI ktphanesi i‡erir. FDOSTUI kendi lisanslarna Bu proje FDOSTUI ktphanesi ierir. FDOSTUI kendi lisanslarna sahiptir.
sahiptir. Bu proje Kitten ktphanesi ierir. Kitten kendi lisansna sahiptir.
Teekkr: Teekkr:
...@@ -23,16 +24,57 @@ Derleme: ...@@ -23,16 +24,57 @@ Derleme:
Katkda Bulunma: Katkda Bulunma:
E§er bu tasarya katkda bulunmak isterseniz, olas hatalar bildirebilir ve Bu projeye katkda bulunmak isterseniz, olas hatalar bildirebilirsiniz ve
FreeDOS TUI Shell'in deposuna katkda bulunabilirsiniz. FreeDOS TUI Shell deposuna katkda bulunma istei yapabilirsiniz.
Deiim Gnl: Deiim Gnl:
0.3 (12-09-2018): Renk dzeni deitirildi.
Bar menleri deitirildi.
Dil dosyalar deitirildi.
"DOSSHELL.FR"'deki gereksiz satrlar silindi.
"Ariv gelerini Gster" seim kutusu dzeltildi ve
"Gizli geleri Gster" seim kutusu dzeltildi.
ESC tuu dzeltildi.
Dizin aac deitirildi.
Baz yazm hatalar dzeltildi.
Srcler liste kutusunun klavyeyle seimi hatas
dzeltildi.
Src deitirmede ve dosya yneticisi aldnda ge
zelliklerinin grntlenmesi dzeltildi.
Balk dosyalar ve kaynak dosyalar ayrld.
Yardm parametresi dzeltildi.
Balk dosyalarnn uzantlar ".h"'den ".hpp"'ye
deitirildi.
Ekran temizleme CLS komut yerine standart fonksiyonla
deitirildi.
GNU GPL 2. srm lisans bilgisi eklendi.
0.2 (24.09.2018): "FDOSTUI.INI"'de devred men seenei rengi griye 0.2 (24.09.2018): "FDOSTUI.INI"'de devred men seenei rengi griye
deitirildi. Ancak, krmz grnyor. (Baka bir hata deitirildi. Ancak, krmz grnyor. (Baka bir hata
olabilir.) Varsaylan arŸiv ”gelerinin g”rntlenmesi olabilir.)
Varsaylan ariv gelerinin grntlenmesi
etkinletirildi ve yalnz okunur gelerinin grntlenmesi etkinletirildi ve yalnz okunur gelerinin grntlenmesi
etkinleŸtirildi. Komut yrtmenin sonunda duraklama etkinletirildi.
eklendi. Baz dosyalarda satr sonu hatas dzeltildi.
Komut yrtmenin sonunda duraklama
eklendi.
Baz dosyalarda satr sonu hatas dzeltildi.
0.1 (13.07.2018): lk srm oluturuldu. 0.1 (13.07.2018): lk srm oluturuldu.
No preview for this file type
...@@ -30,7 +30,7 @@ char history_path_names[HISTORY_LENGTH][MAX_PATH_LENGTH + 1]; ...@@ -30,7 +30,7 @@ char history_path_names[HISTORY_LENGTH][MAX_PATH_LENGTH + 1];
// History index variable // History index variable
int history_index = 0; int history_index = 0;
// Item attributes variable // Item attributes variable
unsigned char *item_attributes = (unsigned char *)"----";; unsigned char *item_attributes = (unsigned char *)"----";
// Kitten library status variable // Kitten library status variable
extern int kitten_status; extern int kitten_status;
...@@ -125,46 +125,46 @@ void copy_file(char *, char *); ...@@ -125,46 +125,46 @@ void copy_file(char *, char *);
// File menu of file manager // File menu of file manager
struct menuitem file_menu[] = struct menuitem file_menu[] =
{ {
{reinterpret_cast<unsigned char const*>(kittengets(5, 1, "Open")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SEPERATOR, item_open, 0}, // Open {reinterpret_cast<unsigned char const *>(kittengets(5, 1, "Open")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SEPERATOR, item_open, 0}, // Open
{reinterpret_cast<unsigned char const*>(kittengets(5, 2, "New Directory")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SEPERATOR, new_directory, 0}, // New directory {reinterpret_cast<unsigned char const *>(kittengets(5, 2, "New Directory")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SEPERATOR, new_directory, 0}, // New directory
{reinterpret_cast<unsigned char const*>(kittengets(5, 3, "Exit")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, file_manager_exit, 0}, // Exit {reinterpret_cast<unsigned char const *>(kittengets(5, 3, "Exit")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, file_manager_exit, 0}, // Exit
{0} {0}
}; };
// Edit menu of file manager // Edit menu of file manager
struct menuitem edit_menu[] = struct menuitem edit_menu[] =
{ {
{reinterpret_cast<unsigned char const*>(kittengets(6, 1, "Cut")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, cut_item, 0}, // Cut {reinterpret_cast<unsigned char const *>(kittengets(6, 1, "Cut")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, cut_item, 0}, // Cut
{reinterpret_cast<unsigned char const*>(kittengets(6, 2, "Copy")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, copy_item, 0}, // Copy {reinterpret_cast<unsigned char const *>(kittengets(6, 2, "Copy")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, copy_item, 0}, // Copy
{reinterpret_cast<unsigned char const*>(kittengets(6, 3, "Paste")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SEPERATOR, paste_item, 0}, // Paste {reinterpret_cast<unsigned char const *>(kittengets(6, 3, "Paste")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SEPERATOR, paste_item, 0}, // Paste
{reinterpret_cast<unsigned char const*>(kittengets(6, 4, "Rename")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SEPERATOR, rename_item, 0}, // Reanme {reinterpret_cast<unsigned char const *>(kittengets(6, 4, "Rename")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SEPERATOR, rename_item, 0}, // Reanme
{reinterpret_cast<unsigned char const*>(kittengets(6, 5, "Change Attribute")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SUBMENU | MENUITEM_SEPERATOR, 0, 0}, // Change Attribute {reinterpret_cast<unsigned char const *>(kittengets(6, 5, "Change Attribute")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SUBMENU | MENUITEM_SEPERATOR, 0, 0}, // Change Attribute
{reinterpret_cast<unsigned char const*>(kittengets(6, 6, "Archive")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, change_archive_attribute, 0}, // Archive {reinterpret_cast<unsigned char const *>(kittengets(6, 6, "Archive")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, change_archive_attribute, 0}, // Archive
{reinterpret_cast<unsigned char const*>(kittengets(6, 7, "Hidden")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, change_hidden_attribute, 0}, // Hidden {reinterpret_cast<unsigned char const *>(kittengets(6, 7, "Hidden")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, change_hidden_attribute, 0}, // Hidden
{reinterpret_cast<unsigned char const*>(kittengets(6, 8, "Read Only")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, change_read_only_attribute, 0}, // Read Only {reinterpret_cast<unsigned char const *>(kittengets(6, 8, "Read Only")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, change_read_only_attribute, 0}, // Read Only
{reinterpret_cast<unsigned char const*>(kittengets(6, 9, "System")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, change_system_attribute, 0}, // System {reinterpret_cast<unsigned char const *>(kittengets(6, 9, "System")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, change_system_attribute, 0}, // System
{0}, {0},
{reinterpret_cast<unsigned char const*>(kittengets(6, 10, "Delete")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, delete_item, 0}, // Delete {reinterpret_cast<unsigned char const *>(kittengets(6, 10, "Delete")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, delete_item, 0}, // Delete
{0} {0}
}; };
// View menu of file manager // View menu of file manager
struct menuitem view_menu[] = struct menuitem view_menu[] =
{ {
{reinterpret_cast<unsigned char const*>(kittengets(7, 1, "Refresh")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SEPERATOR, directory_view, 0}, // Refresh {reinterpret_cast<unsigned char const *>(kittengets(7, 1, "Refresh")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_SEPERATOR, directory_view, 0}, // Refresh
{reinterpret_cast<unsigned char const*>(kittengets(7, 2, "Show Archive Items")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX | MENUITEM_VALUE, show_archive_items, 0}, // Show archive files {reinterpret_cast<unsigned char const *>(kittengets(7, 2, "Show Archive Items")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX | MENUITEM_VALUE, show_archive_items, 0}, // Show archive files
{reinterpret_cast<unsigned char const*>(kittengets(7, 3, "Show Hidden Items")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, show_hidden_items, 0}, // Show hidden files {reinterpret_cast<unsigned char const *>(kittengets(7, 3, "Show Hidden Items")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, show_hidden_items, 0}, // Show hidden files
{reinterpret_cast<unsigned char const*>(kittengets(7, 4, "Show Readonly Items")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX| MENUITEM_VALUE, show_read_only_items, 0}, // Show read only files {reinterpret_cast<unsigned char const *>(kittengets(7, 4, "Show Readonly Items")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX| MENUITEM_VALUE, show_read_only_items, 0}, // Show read only files
{reinterpret_cast<unsigned char const*>(kittengets(7, 5, "Show System Items")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, show_system_items, 0}, // Show system files {reinterpret_cast<unsigned char const *>(kittengets(7, 5, "Show System Items")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_CHECKBOX, show_system_items, 0}, // Show system files
{0} {0}
}; };
// Go menu of file manager // Go menu of file manager
struct menuitem go_menu[] = struct menuitem go_menu[] =
{ {
{reinterpret_cast<unsigned char const*>(kittengets(8, 1, "Back")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_DISABLED, history_back, 0}, // Back {reinterpret_cast<unsigned char const *>(kittengets(8, 1, "Back")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_DISABLED, history_back, 0}, // Back
{reinterpret_cast<unsigned char const*>(kittengets(8, 2, "Foward")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_DISABLED, history_foward, 0}, // Foward {reinterpret_cast<unsigned char const *>(kittengets(8, 2, "Foward")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_DISABLED, history_foward, 0}, // Foward
{reinterpret_cast<unsigned char const*>(kittengets(8, 3, "Up")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_DISABLED, change_to_upper_directory, 0}, // Up {reinterpret_cast<unsigned char const *>(kittengets(8, 3, "Up")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, MENUITEM_DISABLED, change_to_upper_directory, 0}, // Up
{0} {0}
}; };
...@@ -172,9 +172,9 @@ struct menuitem go_menu[] = ...@@ -172,9 +172,9 @@ struct menuitem go_menu[] =
struct menuitembar menus_of_file_manager[] = struct menuitembar menus_of_file_manager[] =
{ {
{reinterpret_cast<unsigned char const*>(kittengets(5, 0, "File")), 0, SCAN_NONE, file_menu}, // File {reinterpret_cast<unsigned char const *>(kittengets(5, 0, "File")), 0, SCAN_NONE, file_menu}, // File
{reinterpret_cast<unsigned char const*>(kittengets(6, 0, "Edit")), 0, SCAN_NONE, edit_menu}, // Edit {reinterpret_cast<unsigned char const *>(kittengets(6, 0, "Edit")), 0, SCAN_NONE, edit_menu}, // Edit
{reinterpret_cast<unsigned char const*>(kittengets(7, 0, "View")), 0, SCAN_NONE, view_menu}, // View {reinterpret_cast<unsigned char const *>(kittengets(7, 0, "View")), 0, SCAN_NONE, view_menu}, // View
{reinterpret_cast<unsigned char const*>(kittengets(8, 0, "Go")), 0, SCAN_NONE, go_menu}, // Go {reinterpret_cast<unsigned char const *>(kittengets(8, 0, "Go")), 0, SCAN_NONE, go_menu}, // Go
{0} {0}
}; };
...@@ -61,15 +61,15 @@ static menubar *bar_menus = new menubar(0, 0, _video_cols, 1); ...@@ -61,15 +61,15 @@ static menubar *bar_menus = new menubar(0, 0, _video_cols, 1);
// Internal applications menu of bar // Internal applications menu of bar
struct menuitem internal_applications_menu[] = struct menuitem internal_applications_menu[] =
{ {
{reinterpret_cast<unsigned char const*>(kittengets(2, 1, "File Manager")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, show_file_manager, 0}, // File manager {reinterpret_cast<unsigned char const *>(kittengets(2, 1, "File Manager")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, show_file_manager, 0}, // File manager
{reinterpret_cast<unsigned char const*>(kittengets(2, 2, "Run")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, show_run, 0}, // Run {reinterpret_cast<unsigned char const *>(kittengets(2, 2, "Run")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, show_run, 0}, // Run
{0} {0}
}; };
// Exit menu of bar // Exit menu of bar
struct menuitem exit_menu[] = struct menuitem exit_menu[] =
{ {
{reinterpret_cast<unsigned char const*>(kittengets(3, 1, "Quit")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, quit, 0}, // Quit {reinterpret_cast<unsigned char const *>(kittengets(3, 1, "Quit")), MENUITEM_MNEMONIC_NONE, 0, SCAN_NONE, 0, quit, 0}, // Quit
{0} {0}
}; };
...@@ -77,7 +77,7 @@ struct menuitem exit_menu[] = ...@@ -77,7 +77,7 @@ struct menuitem exit_menu[] =
struct menuitembar menus_of_bar[] = struct menuitembar menus_of_bar[] =
{ {
{reinterpret_cast<unsigned char const*>(kittengets(2, 0, "Internal Applications")), 0, SCAN_NONE, internal_applications_menu}, // Internal Applications {reinterpret_cast<unsigned char const *>(kittengets(2, 0, "Internal Applications")), 0, SCAN_NONE, internal_applications_menu}, // Internal Applications
{reinterpret_cast<unsigned char const*>(kittengets(3, 0, "Exit")), 0, SCAN_NONE, exit_menu}, // Exit {reinterpret_cast<unsigned char const *>(kittengets(3, 0, "Exit")), 0, SCAN_NONE, exit_menu}, // Exit
{0} {0}
}; };
...@@ -16,12 +16,12 @@ int main(int argc, char *argv[]) ...@@ -16,12 +16,12 @@ int main(int argc, char *argv[])
if(argv[1][0] == '/' && argv[1][1] == '?') // If help argument have used. if(argv[1][0] == '/' && argv[1][1] == '?') // If help argument have used.
{ {
// Help message. // Help message.
puts("FreeDOS TUI Shell 0.2"); puts("FreeDOS TUI Shell 0.3");
puts(""); puts("");
puts(kittengets(0, 0, " FreeDOS TUI Shell is a TUI Shell for FreeDOS.")); puts(kittengets(0, 0, " FreeDOS TUI Shell is a TUI Shell for FreeDOS."));
puts(""); puts("");
puts(kittengets(0, 1, " Copyright (C) 2018 Ercan Ersoy")); puts(kittengets(0, 1, " Copyright (C) 2018 Ercan Ersoy"));
puts(kittengets(0, 2, " FreeDOS TUI Shell licensed under GNU GPL version 3.")); puts(kittengets(0, 2, " FreeDOS TUI Shell licensed under GNU GPL version 2 and GNU GPL version 3."));
if(kitten_status != -1) // If Kitten library is open if(kitten_status != -1) // If Kitten library is open
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment