nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 16:56



Reply to topic  [ 48 posts ]  Go to page Previous  1, 2, 3, 4  Next
nedoPC SDK 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
Shaos wrote:
Shaos wrote:
Соберу туда всё что актуально с SourceForge, а также из незарелизенного RW1P2/SprinterSDK...

Нашёл способ импортировать исходники из CVS (SourceForge) в GitHub со ВСЕЙ историей изменений! :mrgreen:

Кроме того накидал все версии RW1P2 - теперь можно отследить как оно менялось со временем...

Блин, не успел перенести репозиторий, как гитхаб решил мелкомягким продаться :(

http://www.businessinsider.com/microsoft-github-acquisition-could-be-announced-monday-2018-6

Свершилось:

https://blog.github.com/2018-06-04-github-microsoft/

и свободолюбивый народ повалил дружными косяками с гитхаба на гитлаб...

_________________
:dj: https://mastodon.social/@Shaos


04 Jun 2018 20:12
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
GitLab рапортует массовый наплыв - его даже можно отслеживать вживую :o

https://monitor.gitlab.net/dashboard/db/github-importer?orgId=1


Attachments:
GitLab-2018-06-05.png
GitLab-2018-06-05.png [ 84.21 KiB | Viewed 17450 times ]

_________________
:dj: https://mastodon.social/@Shaos
05 Jun 2018 10:03
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
создал себе аккаунт на гитлабе:

https://gitlab.com/shaos

а также завёл группу "Balanced Ternary Group" :)

https://gitlab.com/ternary

P.S. группу nedoPC projects тоже завёл ;)

https://gitlab.com/nedopc

_________________
:dj: https://mastodon.social/@Shaos


05 Jun 2018 12:30
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Зашел - чисто из спортивного интересу...

Гитхаб всегда мне говорил, что "Опера 9.64" - устаревший браузер и ничего практически не показывал... :-?

ГитЛаб мою "Оперу 9.64" никак не ругал, но показал всё вот так:
Attachment:
GitLab.gif
GitLab.gif [ 22.71 KiB | Viewed 17441 times ]

Видимо, это не совсем всё же правильно... но терпимо. :wink:

Гитхаб мне и скачивать ничего не давал... надо будет проверить, как с этим у ГитЛаб-а... :D

_________________
iLavr


05 Jun 2018 12:46
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Lavr wrote:
Гитхаб мне и скачивать ничего не давал... надо будет проверить, как с этим у ГитЛаб-а... :D

Ок - перенесу для теста некоторые репозитории и дам знать - попробуешь ;)

_________________
:dj: https://mastodon.social/@Shaos


05 Jun 2018 13:54
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
создал себе аккаунт на гитлабе:

https://gitlab.com/shaos

а также завёл группу "Balanced Ternary Group" :)

https://gitlab.com/ternary

P.S. группу nedoPC projects тоже завёл ;)

https://gitlab.com/nedopc

Перенёс все репы и кое-что даже разложил по группам ;)

_________________
:dj: https://mastodon.social/@Shaos


05 Jun 2018 22:15
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Lavr wrote:
Гитхаб мне и скачивать ничего не давал... надо будет проверить, как с этим у ГитЛаб-а... :D

Ок - перенесу для теста некоторые репозитории и дам знать - попробуешь ;)

Скачалось! :roll:
Для примера ткнул первое попавшееся: Kostyantyn Matlayev / Flights · GitLab
И скачал архив! :kruto:

Я вообще не знаю, зачем Гитхаб так выкаблучивался - ну не было там особого функционала,
который не могла бы осилить "Опера"... :-?

_________________
iLavr


06 Jun 2018 04:05
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Всё - мой гитхаб пуст :mrgreen:


Attachments:
github.png
github.png [ 203.14 KiB | Viewed 17391 times ]

_________________
:dj: https://mastodon.social/@Shaos
06 Jun 2018 20:30
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
GitLab рапортует массовый наплыв - его даже можно отслеживать вживую :o

https://monitor.gitlab.net/dashboard/db/github-importer?orgId=1


Массовый наплыв закончился, но ежедневные небольшие всплески ещё продолжаются...


Attachments:
GitLab-2018-06-08.png
GitLab-2018-06-08.png [ 98.78 KiB | Viewed 17358 times ]

_________________
:dj: https://mastodon.social/@Shaos
08 Jun 2018 18:00
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Всё - сегодня микрософт официально купил гитхаб, заплатив 7.5 миллиардов долларов:

https://techcrunch.com/2018/10/26/microsoft-closes-its-7-5b-purchase-of-code-sharing-platform-github/

_________________
:dj: https://mastodon.social/@Shaos


26 Oct 2018 17:43
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
Вот пример с циклами:
Code:
ROBOT "Test"
AUTHOR "Shaos"
+INC/ROBBY
+MYSPR

main()
{
 for(A=0;A<20;A++)
 {
   for(B=0;B<10;B++)
   {
      select A B
      set @MYSPR
   }
 }
}

и вот во что они превращаются после препроцессора:
Code:
ROBOT "Test"
AUTHOR "Shaos"
START:
A=0;_l1: (A<20);IFN L _l2
B=0;_l3: (B<10);IFN L _l4
SELECT A B
SET 8192
B=B+1;GOTO _l3;_l4:
A=A+1;GOTO _l1;_l2:
NOP
__END: END

после компиляции в байткод:
Code:
// Generated by ROBBYC version 2.3.0
// Alexander "Shaos" Shabarshin <me@shaos.net>

>>>>(1) ROBOT "Test"
>>>>(2) AUTHOR "Shaos"
>>>>(3) +INC/ROBBY
>>>>(4) +MYSPR
>>>>(5)

// HEADER OF THE ROBOT

// Robot 'Test'
// 0 variables
// 108 bytes of code
// 0 bytes of image

02 9A 30 1F 00 04 54 65 73 74 00 00 00 6C 00 FF |..0...Test...l..
FF FF 00 00 00 00 00 53 68 61 6F 73 00 00 00    |.......Shaos...

// CODE OF THE ROBOT

>>>>(6) main()
TEST.R(6) START:
0000 20
0001 01
0002 0A
0003 FF
0004 00
0005 00
0006 00

>>>>(7) {
>>>>(8)  for(A=0;A<20;A++)
TEST.R(8) A=0;_l1: (A<20);IFN L _l2
0007 40
0008 0C
0009 F5 REG L
000A 0E
000B FF
000C F5 REG A
000D 0A
000E FF
000F F3 LOAD
0010 F5 PUSH 20
0011 14
0012 00
0013 93 <
0014 F4 SAVE
0015 42
0016 01
0017 0E
0018 FF
0019 00
001A 6A
001B 00

>>>>(9)  {
>>>>(10)    for(B=0;B<10;B++)
TEST.R(10) B=0;_l3: (B<10);IFN L _l4
001C 20
001D 01
001E 0B
001F FF
0020 00
0021 00
0022 00
0023 40
0024 0C
0025 F5
0026 0E
0027 FF
0028 F5
0029 0B
002A FF
002B F3
002C F5
002D 0A
002E 00
002F 93
0030 F4
0031 42
0032 01
0033 0E
0034 FF
0035 00
0036 58
0037 00

>>>>(11)    {
>>>>(12)       select A B
TEST.R(12) SELECT A B
0038 69
0039 01
003A 0A
003B FF
003C 01
003D 0B
003E FF

>>>>(13)       set @MYSPR
TEST.R(13) SET 8192
003F 6A
0040 00
0041 00
0042 20
0043 00
0044 00
0045 00

>>>>(14)    }
TEST.R(14) B=B+1;GOTO _l3;_l4:
0046 40
0047 0C
0048 F5 REG B
0049 0B
004A FF
004B F5 REG B
004C 0B
004D FF
004E F3 LOAD
004F F5 PUSH 1
0050 01
0051 00
0052 A0 +
0053 F4 SAVE
0054 43
0055 00
0056 23
0057 00

>>>>(15)  }
TEST.R(15) A=A+1;GOTO _l1;_l2:
0058 40
0059 0C
005A F5 REG A
005B 0A
005C FF
005D F5 REG A
005E 0A
005F FF
0060 F3 LOAD
0061 F5 PUSH 1
0062 01
0063 00
0064 A0 +
0065 F4 SAVE
0066 43
0067 00
0068 07
0069 00

>>>>(16) }
TEST.R(16) NOP
006A 00
TEST.R(0) __END: END
006B FF 

и после кросс-копиляции в код 8080:
Code:
\ Generated by RW0COMP v2.0 (part of NedoPC SDK, see http://www.nedopc.org)
\ Copyright (c) 2001-2005, Alexander Shabarshin <shaos@mail.ru>

        ORG     #0000
@BASE   EQU     #4000
@REGS   EQU     16448
@REG_X  EQU     16448
@REG_Y  EQU     16450
\REG_D
@REG_N  EQU     16454
\REG_K
@REG_R  EQU     16458
@REG_T  EQU     16460
\REG_E
\REG_M
\REG_I
@REG_A  EQU     16468
@REG_B  EQU     16470
@REG_C  EQU     16472
\REG_P
@REG_L  EQU     16476
\REG_S
@RAND   EQU     1000
   JMP   HEADER
        \ DATA
_L_BASE DW  @BASE
_L_REGS DW  @REGS
_L_STAK   DW  @REGS
CHX     DB  0
CHY     DB  0
CHS     DB  4
CHB     DB  0
_NPLANE DW  0
_ANGLE  DB  0
_COLOR  DB  0
_CURX   DB  0
_CURY   DB  0
_SAYX   DB  0
_SAYY   DB  0
_SAYC   DB  2
_ATRS   DB  0
HEADER: \ INIT SYSTEM
   CALL    INIT
        \ SET _SAYX & _SAYY
        XRA_A
        STA     _SAYX
        MVI_A,  @DY
        DCR_A
        STA     _SAYY
        \ ERASE FROM BASE TO REGS+32
   LHLD   _L_BASE
   XCHG
   LHLD   _L_REGS
        LXI_B,  32
        DAD_B
        XCHG
        MVI_C,  0
_STD_1: MOV_M,C
        INX_H
        MOV_A,H
        CMP_D
        JNZ     _STD_1
        MOV_A,L
        CMP_E
        JNZ     _STD_1
        \ SET SP & SAVE RETADDR
        POP_D
   LHLD   _L_STAK
   SPHL
        PUSH_D
_START:
\ *0x20 0x01 0x0A 0xFF %m2
_j0000:         LXI_H,  #0000
        SHLD   @REG_A
\ *0x40
_j0007: \ 0xF5
        PUSH_H
        LXI_H,  #FF0E
\ 0xF5
        PUSH_H
        LXI_H,  #FF0A
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ    _l0001
        \ REGISTER
   CALL   _R_GET
   JMP   _l0002
_l0001: NOP
        \ VARIABLE
        CALL    _B_GET
_l0002: NOP
\ 0xF5
        PUSH_H
        LXI_H,  #0014
\ 0x93
        POP_D
        CALL CCLT
\ 0xF4
        POP_D
        XCHG
        MVI_A,  #FF
        CMP_H
        JNZ    _l0003
        \ REGISTER
   CALL   _R_SET
   JMP   _l0004
_l0003: NOP
        \ VARIABLE
        CALL   _B_SET
_l0004: NOP
        POP_H
\ *0x42 0x01 0x0E 0xFF 0x00 %w1
_j0015:         LDA @REG_L
        ORA_A
        JZ _j006A
\ *0x20 0x01 0x0B 0xFF %m2
_j001C:         LXI_H,  #0000
        SHLD   @REG_B
\ *0x40
_j0023: \ 0xF5
        PUSH_H
        LXI_H,  #FF0E
\ 0xF5
        PUSH_H
        LXI_H,  #FF0B
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ    _l0005
        \ REGISTER
   CALL   _R_GET
   JMP   _l0006
_l0005: NOP
        \ VARIABLE
        CALL    _B_GET
_l0006: NOP
\ 0xF5
        PUSH_H
        LXI_H,  #000A
\ 0x93
        POP_D
        CALL CCLT
\ 0xF4
        POP_D
        XCHG
        MVI_A,  #FF
        CMP_H
        JNZ    _l0007
        \ REGISTER
   CALL   _R_SET
   JMP   _l0008
_l0007: NOP
        \ VARIABLE
        CALL   _B_SET
_l0008: NOP
        POP_H
\ *0x42 0x01 0x0E 0xFF 0x00 %w1
_j0031:         LDA @REG_L
        ORA_A
        JZ _j0058
\ *0x69 %m1 %m2
_j0038:         LXI_H,  #000A
        CALL    _R_GET
        PUSH_H
        LXI_H,  #000B
        CALL    _R_GET
        POP_D
        MOV_A,E
        STA _CURX
        MOV_A,L
        STA _CURY
\ *0x6A 0x00 %w1 0x00 0x00 0x00
_j003F:         LXI_H,  #2000
        CALL    _SET
\ *0x40
_j0046: \ 0xF5
        PUSH_H
        LXI_H,  #FF0B
\ 0xF5
        PUSH_H
        LXI_H,  #FF0B
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ    _l0009
        \ REGISTER
   CALL   _R_GET
   JMP   _l0010
_l0009: NOP
        \ VARIABLE
        CALL    _B_GET
_l0010: NOP
\ 0xF5
        PUSH_H
        LXI_H,  #0001
\ 0xA0
        POP_D
        DAD_D
\ 0xF4
        POP_D
        XCHG
        MVI_A,  #FF
        CMP_H
        JNZ    _l0011
        \ REGISTER
   CALL   _R_SET
   JMP   _l0012
_l0011: NOP
        \ VARIABLE
        CALL   _B_SET
_l0012: NOP
        POP_H
\ *0x43 0x00 %w1
_j0054:         JMP _j0023
\ *0x40
_j0058: \ 0xF5
        PUSH_H
        LXI_H,  #FF0A
\ 0xF5
        PUSH_H
        LXI_H,  #FF0A
\ 0xF3
        MVI_A,  #FF
        CMP_H
        JNZ    _l0013
        \ REGISTER
   CALL   _R_GET
   JMP   _l0014
_l0013: NOP
        \ VARIABLE
        CALL    _B_GET
_l0014: NOP
\ 0xF5
        PUSH_H
        LXI_H,  #0001
\ 0xA0
        POP_D
        DAD_D
\ 0xF4
        POP_D
        XCHG
        MVI_A,  #FF
        CMP_H
        JNZ    _l0015
        \ REGISTER
   CALL   _R_SET
   JMP   _l0016
_l0015: NOP
        \ VARIABLE
        CALL   _B_SET
_l0016: NOP
        POP_H
\ *0x43 0x00 %w1
_j0066:         JMP _j0007
\ *0x00
_j006A:    \ NOP is empty operation
\ *0xFF
_j006B:
+./LIB/I8080/ORION
+./LIB/I8080/_CLIB
+./LIB/I8080/_VARS
+./LIB/I8080/_PLATF2
+./LIB/I8080/NULL_

путём добавления более оптимального кода для A=0, B=0, C=0, A<N, A=A+1 и т.д. в __RULES можно сделать более опитимальное представление этого кода для 8080 (и соответственно более быстрое)...

Вот чего действительно недостаёт в nedoPC SDK так это компиляции Robby-программы в исходник на сях, который можно было бы затем скомпилировать под целевую платформу (текстовый дос или текстовый (ncurses) линух (а может даже графический дос и графический линух?)) - это сильно бы упростило отладку и соответственно разработку нового робби-кода (хотя не - графическим пусть будет интерпретатор байт-кода, а компилятор^2 пусть будет только текстовым)...

_________________
:dj: https://mastodon.social/@Shaos


02 May 2020 23:18
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Кстати оказалось, что в линухе текст можно раскрашивать и переставлять по экрану без ncurses :mrgreen:

https://wiki.bash-hackers.org/scripting/terminalcodes

Нвдо чтоли свой conio.h накидать для линуха, чтобы один и тот же исходник собирался и в досе, и в линухе :kruto:
Code:
    clrscr <<<
    cprintf ???
    delline
    getch <<<
    getche <<<
    gotoxy <<<
    kbhit <<<
    wherex ???
    wherey ???
    textcolor <<<
    textbackground <<<
clrscr, gotoxy, getch[e] уже есть вот тут: https://github.com/pushkar147/conio4gcc
плюс раскрашивание (textcolor и textbackground) сделать как описано по ссылке выше - ескейп-последовательностями
и по сути всё (разве что если надо спецкнопки обрабатывать - типа функциональных, стрелок и т.д. то проверка по getch в программе будет другая в случае линуха)
P.S. kbhit можно взять отсюда: https://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html
P.P.S. cprintf можно свой накатать (в досе надо cprintf юзать, чтобы раскрашивало), в котором подсчитывать текущую позицию курсора - вот и wherex с wherey покроются!

_________________
:dj: https://mastodon.social/@Shaos


03 May 2020 09:01
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post Re:
Shaos wrote:
Shaos wrote:
Вопрос возник - нужно добавить в RW1P2 файловые операции. Я за эти годы несколько подходов окучил - пока ни один не понравился (каналы, спец-команды, ассемблерные вставки). Вобщем думается сделать на нижнем уровне передачу файлов блоками по 256 байт (как на CP/M-80), а на строки или на байты уже будет делить библиотека, написанная на RW1.


Weberta-интерпретатор байткода RW0 имеет следующую реализацию файловых операций:
Shaos wrote:
Файлы читаются так - получателю -4 (@filesystem) посылается пакет с именем файла (одна буква на ячейку), далее ждём евента от @filesystem - в нём будет размер прочитанного файла, далее обращаемся (через указатели A/B/C) в отрицательную область памяти переменных (ячейки с адресами от -32K до -1) за телом файла.

Аналогичным образом можно сделать запись - добавив к имени файла какой-то суффикс, например !, что будет обозначать запись из отрицательной области памяти переменных в файл с указанным именем (длину записи можно указать следом за !)...


P.S. На самом деле ячейки с адресами от -32768 до -257 (т.е. 32512 слов или 65024 байта) потому что -256 и выше идут коды "регистров"

Переосмысливая идеи 2014 года можно предложить следующее
Пакет с именем файла - это массив слов, в первом слове которого указано количество следующих далее букв и сейчас поддерживается только чтение (например в Circuits.CC):
"filename" - прочитать текст из файла с именем filename, разместив его начиная с адреса #8000 по одной букве на слово, причём количество скопированных букв приходит в ответе от @filesystem
По аналогии добавляем:
"filename!" - записать буфер в файл с именем filename, причём пишем только младшие байты и останавливаемся, когда встретили ноль
"filename%" - прочитать двоичный файл, упаковав байты по 2 в слово (от системы придет прочитанный размер в байтах)
"filename%hhh" - записать двоичный файл с байтовым размером hhh (шестнадцатиричное число) пользуясь словами из буфера (если размер нечётный, то из последнего слова возьмется только младший байт)
"filename+" - дополнить текстовый файл строкой из буфера (буква на слово, писать до нуля) - хотя может быть проще say перенаправить в файл...
Работу с произвольным адресом пока можно отложить на будущее, но уже можно считать, что там в систему будут передаваться не строки, а структуры - с адресом, длиной, смещением внутри файла и т.д.

P.S. Скелет программы (вырезка из TERNARO.R):
Code:
robot "Test"
author "Shaos"
+INC/ROBBY
main()
{
 def tmp[17] = "START" // тут хранится пакет - в ячейке 0 будет 5, что есть длина слова, и далее 5 ячеек с буквами
 sendp tmp[0] @filesystem // хотим файл с именем START
 while(TRUE) // вечный цикл в котором мы будем обрабатывать приходящие сообщения
 {
   code = 0
   recv code // принять сообщение и записать его в переменную code
   if(N==0) continue // буфер принятых сообщений пуст
   if(N==@mouse) // это сообщение от мыши
   {
     ...
   }
   if(N==@filesystem) // это сообщение от файловой системы, сообщающее, что файл записан в буфер (в регистре K будет размер)
   {
      A = @filebuffer // начинаем читать с адреса #8000
      while(A[0]) // пока не встретили ноль (либо любой другой маркер окончания полезной информации - этот символ должен быть в файле)
      {
           // что-то делаем с очередной буквой A[0]
           A = A + 1 // сдвигаем указатель на 1
      }
   }
 }
}

_________________
:dj: https://mastodon.social/@Shaos


03 May 2020 13:21
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
путём добавления более оптимального кода для A=0, B=0, C=0, A<N, A=A+1 и т.д. в __RULES можно сделать более опитимальное представление этого кода для 8080 (и соответственно более быстрое
также можно пойти ещё дальше и специально для z80 сделать робби-регистры A,B и C представляемыми индексными регистрами IX, IY и скажем HL'

P.S. в случае z80 можно вообще убрать из памяти секцию регистров, распределив все доступные в RW1P2 регистры Robby либо по теневым регистрам процессора, либо сделав их полностью процедурными:
Code:
_base   equ     %base
_regs   equ     %regs
_reg_x  equ     %reg_x --> B'
_reg_y  equ     %reg_y --> C'
;reg_d
_reg_n  equ     %reg_n --> DE' (?)
;reg_k
_reg_r  equ     %reg_r --> procedure (16-bit RANDOM)
_reg_t  equ     %reg_t --> procedure (0.1sec COUNTER)
;reg_e
;reg_m
;reg_i
_reg_a  equ     %reg_a --> IX
_reg_b  equ     %reg_b --> IY
_reg_c  equ     %reg_c --> HL'
;reg_p
_reg_l  equ     %reg_l --> HL (?)
;reg_s

_________________
:dj: https://mastodon.social/@Shaos


27 Dec 2020 17:35
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
Кстати оказалось, что в линухе текст можно раскрашивать и переставлять по экрану без ncurses :mrgreen:

https://wiki.bash-hackers.org/scripting/terminalcodes

Нвдо чтоли свой conio.h накидать для линуха, чтобы один и тот же исходник собирался и в досе, и в линухе :kruto:
Code:
    clrscr <<<
    cprintf ???
    delline
    getch <<<
    getche <<<
    gotoxy <<<
    kbhit <<<
    wherex ???
    wherey ???
    textcolor <<<
    textbackground <<<
clrscr, gotoxy, getch[e] уже есть вот тут: https://github.com/pushkar147/conio4gcc
плюс раскрашивание (textcolor и textbackground) сделать как описано по ссылке выше - ескейп-последовательностями
и по сути всё (разве что если надо спецкнопки обрабатывать - типа функциональных, стрелок и т.д. то проверка по getch в программе будет другая в случае линуха)
P.S. kbhit можно взять отсюда: https://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html
P.P.S. cprintf можно свой накатать (в досе надо cprintf юзать, чтобы раскрашивало), в котором подсчитывать текущую позицию курсора - вот и wherex с wherey покроются!

Вот так в линуксе можно раскрашивать текст в терминале:
Code:
#define BLACK   "\x1B[30m"
#define RED     "\x1B[31m"
#define GREEN   "\x1B[32m"
#define BROWN   "\x1B[33m"
#define BLUE    "\x1B[34m"
#define MAGENTA "\x1B[35m"
#define CYAN    "\x1B[36m"
#define WHITE   "\x1B[37m"

#define _BLACK   "\x1B[40m"
#define _RED     "\x1B[41m"
#define _GREEN   "\x1B[42m"
#define _BROWN   "\x1B[43m"
#define _BLUE    "\x1B[44m"
#define _MAGENTA "\x1B[45m"
#define _CYAN    "\x1B[46m"
#define _WHITE   "\x1B[47m"

#define RESET   "\x1B[0m"
#define BRIGHT  "\x1B[1m"
#define INVERSE "\x1B[7m"

int main() {

  printf(RED "red\n"     RESET);
  printf(GREEN "green\n"   RESET);
  printf(BROWN "brown\n"  RESET);
  printf(BLUE "blue\n"    RESET);
  printf(MAGENTA "magenta\n" RESET);
  printf(CYAN "cyan\n"    RESET);
  printf(WHITE "white\n"   RESET);

  printf(_BLUE BLACK "black"     RESET "\n");
  printf(_BLUE RED "red"     RESET "\n");
  printf(BRIGHT _BLUE RED "red"     RESET "\n");
  printf(_BLUE GREEN "green"   RESET "\n");
  printf(BRIGHT _BLUE BROWN "yellow"  RESET "\n");
  printf(BRIGHT _BLUE BLUE "blue"    RESET "\n");
  printf(_BLUE MAGENTA "magenta" RESET "\n");
  printf(_BLUE CYAN "cyan"    RESET "\n");
  printf(_BLUE WHITE "white"   RESET "\n");
  printf(BRIGHT _BLUE WHITE "white"   RESET "\n");
  printf(INVERSE BRIGHT _BLUE WHITE "i.white"   RESET "\n");
}

Результат вышеприведённой программы вот:


Attachments:
Screenshot from 2021-02-20 19-21-45.png
Screenshot from 2021-02-20 19-21-45.png [ 11.39 KiB | Viewed 11792 times ]

_________________
:dj: https://mastodon.social/@Shaos
20 Feb 2021 20:20
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 48 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 29 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.