← All posts tagged code

Renha
? code C

Жуйк, я си-нуб, ругай. Это по задумке реализация буфера для пакетов размером до pc_input_packet байт. Пакеты нельзя бить по кусочкам, поэтому некоторая избыточность в конце буфера кажется неизвестна.

#define pc_input_size 1024
#define pc_input_packet 256
uint16_t pc_input_write_pointer= 0;
uint8_t pc_input_buffers[pc_input_size];
uint16_t pc_input_read_pointer= 0;
uint16_t pc_input_toread()
{//if return is zero, nothing to read, else read from returned address
  if (pc_input_read_pointer > (pc_input_size - pc_input_packet))
    pc_input_read_pointer= 0;
  if (pc_input_read_pointer==pc_input_write_pointer)
    return 0;
  else
    return pc_input_buffers+pc_input_read_pointer;
}
uint16_t pc_input_towrite(uint16_t amount)
{//if return is zero, could not write, else write to returned address
  if (pc_input_write_pointer > (pc_input_size - pc_input_packet))
    pc_input_write_pointer= 0;
  if (pc_input_write_pointer > pc_input_read_pointer)
    return pc_input_buffers+pc_input_write_pointer;
  else if (pc_input_read_pointer - pc_input_write_pointer > pc_input_packet)
    return pc_input_buffers+pc_input_write_pointer;
  else return 0;
}

Renha

Начал кодить Tox-клиент на 8th (коммерческий кроссплатформенный forth), затестил FFI, довольно мило:
"tox" lib tox

tox drop
"N" "tox_version_major" func: tox_version_major
"N" "tox_version_minor" func: tox_version_minor
"N" "tox_version_patch" func: tox_version_patch

"NNNN" "tox_version_is_compatible" func: tox_version_is_compatible

"Pn" "tox_options_new" func: tox_options_new

tox_version_minor .
tox_version_major .
tox_version_patch .
1 2 3 tox_version_is_compatible .

Renha

// ==UserScript==
// @name        Убрать лишнее с жуйка и подписка и отписка в один клик
// @namespace   Renha
// @include     *://juick.com/*
// @version     1
// @grant       none
// ==/UserScript==

$('nav[id=global]').remove();
$('div[id=logo]').remove();
$('div[id=search]').remove();

$('aside[id="column"]').remove();
$('ins[class="adsbygoogle"]').remove();
$('a[href="/?show=recommended"]').text("Все");
$('a[href="/?show=recommended"]').attr("href", "/?show=all");
$('input[name="search"]').remove();

$('a:contains("Рекомендовать")').attr("href","#");
$('a:contains("Рекомендовать")').attr("onclick",'$.post("/post2",{place_id: 0,body: "! #"+pageMID});location.reload();');
$('a:contains("Подписан")').attr("href","#");
$('a:contains("Подписан")').attr("onclick",'$.post("/post2",{place_id: 0,body: "U #"+pageMID});location.reload();');
$('a:contains("Подписаться")').attr("href","#");
$('a:contains("Подписаться")').attr("onclick",'$.post("/post2",{place_id: 0,body: "S #"+pageMID});location.reload();');

$('a:contains("Мне нравится")').text("Рекомендовать");

var say="Подписаться";
var tog="S";
if (window.location.search.search('show=discuss')>0)
{
	say="Отписаться";
	tog="U";
}
$('.l').append('<a href="#" class="ololoshka">'+say+'</a>');
$(".ololoshka").attr("onclick",'$.post("/post2",{place_id: 0,body: "'+tog+' #"+$(this).closest("article").attr("data-mid")});');

Renha

// ==UserScript==
// @name        Убрать лишнее с жуйка и подписка и отписка в один клик
// @namespace   Renha
// @include     *://juick.com/*
// @version     1
// @grant       none
// ==/UserScript==

$('nav[id=global]').remove();
$('div[id=logo]').remove();
$('div[id=search]').remove();

$('aside[id="column"]').remove();
$('ins[class="adsbygoogle"]').remove();
$('a[href="/?show=recommended"]').text("Все");
$('a[href="/?show=recommended"]').attr("href", "/?show=all");
$('input[name="search"]').remove();

var say="Подписаться";
var tog="S";
if (window.location.search=="?show=discuss")
{
	say="Отписаться";
	tog="U";
}
$('.l').append('<a href="#" class="ololoshka">'+say+'</a>');
$(".ololoshka").attr("onclick",'$.post("/post2",{place_id: 0,body: "'+tog+' #"+$(this).closest("article").attr("data-mid")});');

Renha

// ==UserScript==
// @name        Убрать лишнее с жуйка
// @namespace   Renha
// @include     *://juick.com/*
// @version     1
// @grant       none
// ==/UserScript==

$('nav[id=global]').remove();
$('div[id=logo]').remove();
$('div[id=search]').remove();

$('aside[id="column"]').remove();
$('ins[class="adsbygoogle"]').remove();
$('a[href="/?show=recommended"]').text("Все");
$('a[href="/?show=recommended"]').attr("href", "/?show=all");
$('input[name="search"]').remove();

Renha

В #2787846 обещал для SP-Forth синтаксического сахара в виде:
: lala 1 . ;
lala
1  Ok
lala`
1  Ok
lala`lka
1 Ok

Как сделать: берём библиотеку cafeins.f (я думаю вам она всё равно понадобится, чтобы ЯЗЫК НА ВАС НЕ КРИЧАЛ), и там перед CEQUAL-U вставляем следующий код:
    2SWAP 2DUP S" `" SEARCH IF
    	NIP -
    ELSE
    	2DROP
    THEN

Вообще надо было в другом месте править, заодно с цифрами и прочим, но как-то с документацией у SP-Forth не очень, библиотеки проще прочитать. К сожалению, `вотэто будет незнакомым словом по-прежнему, как и 1`единичка, как раз поэтому. В парсер надо лезть. Но главного я доби`лся , хорошо хоть форт легко позволяет этого доби`ваться .

Renha

вынесу из комментов к #2785629, пожалуй. Наивная, конечно, реализаци, ну и не запускал так что могут быть ошибки уровня опечаток.

variable Печь
: поставить ;
: на ;
: градусов, swap ! ;

0
1+ dup value Яйца,
1+ dup value муку
1+ dup value сахар,
drop

create котёл 3 allot

: в ;
: В ;
: всего ;
; все ;
: ингредиента ;
: поместить, swap 0 do tuck ! loop ;

котёл value котле

defer вязкость
' > is вязкость

( взято с http://rosettacode.org/wiki/Sorting_algorithms/Bubble_sort#Forth )
: перемешать. ( addr cnt -- )
  dup 1 do
    2dup i - cells bounds do
      i 2@ вязкость if i 2@ swap i 2! then
    cell +loop
  loop ;

Печь поставить на 300 градусов,
Яйца, сахар, муку - всего 3 ингредиента в котёл поместить,
В котле все 3 ингредиента перемешать.

Renha

Решение задачи из #2745090 на gforth. На оптимальность решения не претендую (оно наивное), также интересно было самому написать - в реализации стандартных слов (например, .) не подглядывал. Замечания приветствуются. Комментариями снабжать сперва начал (первая строка), но это выглядело странно, так что оставил только карты стека. Выполнять например так: -234 n>s type

\ create string buffer with 20 cells alloting
create string-buffer 20 cells allot

: n>s ( n --  c-addr u )
	dup 0< if negate '-' swap else 0 swap then 0 ( minus-char number length )
	begin 1+ swap 10 /mod swap '0' + -rot tuck 0= until nip
	1+ dup roll swap ( chars length )
	dup begin 2dup - string-buffer + 1 4 roll fill 1- dup 0= until drop
	string-buffer swap
;

Renha

Котики, вот смотрите, есть 2D-проект на юнити, там врезания объектов надо обрабатывать. Надо чтобы в разных ситуациях: 1) объект А уничтожался, объект Б продолжал движение как ни в чём не бывало, 2) объект А уничтожался, объект Б отлетал как от столкновения, 3) объект А не уничтожался, столкновение. Чёт придумать не могу, в голове одни энергетики