Archiwum Strony 2

Wyciągamy stare źródła…

Postanowiłem że od dzisiaj zaczynam wyciąganie i publikacje moich starych i zakurzonych kodów źródłowych. Szkoda mi żeby przepadły w zapomnieniu lub przez jakiś zdarzenie bliżej nie przewidziane, a tak raz że je zarchiwizuje sobie to jeszcze może komuś się przydadzą do nauki. Na pierwszy raz idą źródła z mojej przygody z Assmblerem, przynajmniej te które udało mi się ja narazie odnaleść jak do tej pory…

PS: Czemu WordPress stara się parsować w jasno oznaczonych kodach źródłowych emotki… :/

Kolejne źródło: Quiz w ASM

Kolejne wyciągnięte i publikowane przez mnie źródło, może się komuś przyda: prosty quiz z 3 pytaniami napisany w ASM, jeśli mnie pamięć nie myli w MASM’ie.


.model tiny
.code
org 100h

start:
jmp begin

new_ln:
mov ah, 09h
mov dx, offset ln
int 21h
ret

WriteLn:
mov ah, 09h
int 21h
call new_ln
ret

rowne:
Inc true_odp
mov dx, offset yes
call WriteLn
ret

nie_rowne:
Inc false_odp
mov dx, offset no
call WriteLn
ret

Readln:
mov ah, 0ah
mov dx, offset read_odp
int 21h
call new_ln
ret

spr:
mov si, (offset read_odp) + 2
repe cmpsb
jz rowne
jnz nie_rowne
ret

Write_NrPyt:
push dx

call new_ln

mov ah, 09h
mov dx, offset stat3
int 21h

pop dx
mov dl, [pyt]
add dl, 48
mov ah, 02h
int 21h

call new_ln

inc pyt
ret

begin:

mov dx, offset s2
call WritelN
call new_ln

call Write_NrPyt

;Pytanie nr. 1
mov dx, offset pyt1
call WriteLn;Wyswietl pytanie

call ReadLn; Wczytaj odpowiedŸ

mov di, offset odp1; sprawdŸ
mov cx, odp1_dl
call spr

call Write_NrPyt
;Pytanie nr. 2
mov dx, offset pyt2
call WriteLn
call ReadLn
mov di, offset odp2
mov cx, odp2_dl
call spr

call Write_NrPyt
;Pytanie nr. 3
mov dx, offset pyt3
call WriteLn
call ReadLn
mov di, offset odp3
mov cx, odp3_dl
call spr

call new_ln
mov dx, offset s1
call WriteLn
call new_ln

mov ah, 09h
mov dx, offset stat1
int 21h

mov ah, 02h
mov dl, [true_odp]
add dl, 48
int 21h

call new_ln

mov ah, 09h
mov dx, offset stat2
int 21h

mov ah, 02h
mov dl, [false_odp]
add dl, 48
int 21h

call new_ln

mov ah, 09h
mov dx, offset line
int 21h

mov dx, offset autor
call WriteLn

mov ah, 08h
int 21h

;koniec programu
mov ah, 4ch
int 21h

;"________DANE:______________________________________"
;PYTANIA:
pyt1 db "Rozszyfroj skrot SCT...$"
odp1 db "S&N Coders Team"
odp1_dl equ ($ - odp1)

pyt2 db "Ile jest rejestrow ogolnego przeznaczenia ktore da sie podzielic na rejestry 8 bitowe? $"
odp2 db "4"
odp2_dl equ ($ - odp2)

pyt3 db "Jaki jest przesumiecie programu typu .com w danym segmęcie (podaj w systemie szesnastkowym) ?$"
odp3 db "100"
odp3_dl equ ($ - odp3)

;Do procedur:
yes db "Prawidlowa odpowiedz$"
no db "Bledna odpowiedz$"
ln db 13,10,"$"

s1 db "================================KONIEC================================$"
s2 db "=================================Quiz=================================$"

stat1 db "Poprawnych odpowiedzi: $"
stat2 db "Blednych odpowiedzi: $"
stat3 db "Pytanie nr. $"

line db 80 dup("_"),"$"
autor db 10,13,"Created by Adawo (S&N Coders Team)$"

pyt db 1
true_odp db 0
false_odp db 0

read_odp db 22
db 0
db 25 dup ("$")

end start

Wyświetlanie daty w Assemblerze

Program napisany za czasów gdy uczyłem się programowania w assemblerze. Jak tytuł wskazuje wyświetla aktualną datę, więc raczej nic zaawansowanego, ale komuś się może przyda… Eh, muszę kiedyś wrócić do tego pięknego języka :)


;program wyświtlający aktualna date

.model tiny
.code
org 100h

start:

    jmp begin

    w_znak:
        push ax
        push bx

        mov ah, 0eh
        mov bx, 0
        int 10h

        pop bx
        pop ax
    ret

    w_data:
        push ax
        push bx

        xor ah, ah

        mov bh, 10
        div bh

        add al,'0'
        call w_znak
        mov al, ah
        add al, '0'
        call w_znak

        pop bx
        pop ax
     ret     

    data: 

        mov ah, 09h
        mov dx, offset s1
        int 21h

        mov ah, 2ah
        int 21h

        mov al, dl
        call w_data
        mov al,'.'
        call w_znak

        mov al, dh
        call w_data
        mov al, '.'
        call w_znak 

        sub cx, 1900
        cmp cl, 100
        jb przed2tys
        jnb po2tys

        po2tys:
            mov al, 20
            call w_data
            sub cl, 100
            call przed2tys
        ret

        przed2tys:
            mov al, cl
            call w_data
         ret     

    ret

    begin:      
            call data     

            mov ax, 4c00h
            int 21h

    s1 db "Witaj! Dzisiaj mamy: $"     
end start

Szczera piosenka…

Piosenka zwie się “Wszystkiego najlepszego”, a zespół który ją gra “Completely Unprofessional“. Mnie osobiście przypadła do gustu i polecam… Więcej takich można znaleźć na ich stronie lub kanale youtube.

Wyniki wyszukiwania Google zawężone do określonego przedziału czasowego

O tricku dowiedziałem się przez przypadek, włączając jeden z sceencastów przygotowanych przez Webhosting.pl (z którego swoją drogą, dowiedzieć się również można jak zawęzić wyniki wyszukiwania wyszukiwarki grafiki  Google tylko do twarzy…).

Otóż aby zawęzić listę wyników wyszukiwania Google do stron z określonego przedziału czasowego, do adresu URL wystarczy dopisać tylko ciąg &as_qdr=d, co w rezultacie spowoduje pojawienie się dodatkowej listy rozwijalnej z której będzie można wybrać określony przedział czasowy.  Przydatne sprawa, nieprawdaż ? :)

FAQ: Pobieranie listy zarejestrowanych typów MIME w giomm

Aby pobrać listę zarejestrowanych typów MIME należy posłużyć się funckją oferowaną przez przestrzeń nazw Gio,  a mianowicie content_types_get_registered.

Przykład programu wypisującego liste typów mime na standardowe wyjście:


#include <iostream>
#include <giomm.h>

int main(int argc, char *argv[]) {
    Gio::init(); //Inicjujemy Giomm

    std::list<Glib::ustring> mime_types = Gio::content_types_get_registered(); //Lista typow mime
    //Wypisujemy liste
    for (std::list<Glib::ustring>::iterator iter = mime_types.begin(); iter != mime_types.end(); ++iter) {
        std::cout << *iter << std::endl; 
    }    

    return 0;
}

Hackme 3.0

Po skończeniu Hackme (URL zamazany by niepsuć innym zabawy...)

Po skończeniu Hackme (URL zamazany by niepsuć innym zabawy...)

Wczoraj natknąłem się na wpis o grze Hackme na blogu WhiteDervish. Pomyślałem sobie że spróbuje i ja swoich sił.

Z racji że wcześniejsze wersje hackme nie działają na Firefoxie zacząłem od wersji 3.0. Nie sądziłem że dam sobie rade z zadaniami innymi niż javascript…  a tu niespodzianka, gra skończona już dzisiaj, obok widniej mój dowód na przejście gry.

Zadania wcale takie trudne nie były, choć wymagały dość rozległej wiedzy zarówno o popularnych metodach ataków, językach “tworzących” www czy zwyczajowym nazywaniu niektórych rzeczy.

Mnie najwięcej czasu zajął poziom 7 z stronką grupy hax00rskiej i to ze względu na 30 minutowe bany, chwile przyciąłem również się na  zadaniu z   “telekomuną polską”.

Wyśmienitą zabawę intelektualną serwował Unknow z uw-team :)

[30.07.2008] Pulpit

Mały porządek przed moim wyjazdem wakacyjnym:

Własna zakładka strony w Gtk::Notebook

Efekt o którym mowa...

Efekt o którym mowa...

Domyślnie, klasa notebook jako zakładkę strony przyjmuje zwykłą etykietę tekstową, ale dzięki metodzie set_tab_label jesteśmy wstanie jako zakładkę strony wstawić dowolny widget. Przykładem praktycznego zastosowania tej metody może być np. przycisk służący do zamknięcia otwartego dokumentu w edytorze pozwalającym na prace z wieloma otwartymi dokumentami naraz (patrz gedit).

Metoda przyjmuje 2 argumenty: referencje do widgetu będącego jedną z stron dla którego chcemy zmienić zakładkę oraz referencje do widgetu mającego być nową zakładką. Proste prawa ?

Przykład ilustrujący najważniejszą cześć kodu (szkielet klasy strony notebooka i zakładki):


//Kompilacja: g++ `pkg-config gtkmm-2.4 --cflags --libs` nazwa_pliku.cpp

//#include <gtkmm.h> - nie zapomnij dołączyć...
//Przy założeniu: using namespace Gtk; 

class NotebookPage : public Bin /*Klasa bazowa dla strony */{
    public:
        NotebookPage();
        virtual ~NotebookPage();

    class PageHeader : public HBox { //Klasa reprezentująca zakładke
        public:
            PageHeader();
            PageHeader(Glib::ustring title);
            virtual ~PageHeader() {};

            void set_title(Glib::ustring title) { this->title.set_text(title); };
            Glib::ustring get_title() { return this->title.get_text(); };

            Button* get_close_btn() { return &close_btn;  }; //Zwraca widget przycisku
            /* metody dla pozostałych widgetów nagówka */

        protected:
            Image icon; //Ikona zakładki
            Label title; //Tytuł zakładki
            Button close_btn; //Przycisk zamykajacy zakładke
    };        

    protected:

        void on_close_tab_clicked(); //Zdarzenie obsługi zamkniecia zakładki...
        //itd.
};

NotebookPage::PageHeader::PageHeader():
    icon(Stock::FILE, ICON_SIZE_MENU),
    title("Zakładka bez nazwy")
{
    close_btn.set_size_request(21, 20); //Rozmiar przycisu
    //Ikona dla przycisku zamkniecia zakładki
    Image *close_btn_icon = new Image(Stock::CLOSE, ICON_SIZE_MENU);
    close_btn.set_image(*close_btn_icon);
    //Relief przycisku tzn. obramówka wokół niego...
    close_btn.set_relief(Gtk::RELIEF_NONE); //Widoczna tylko po najechaniu kursorem
    //Pozycja obrazka wewnatrz przycisku, tylko jak regulowac padding wewnątrz przycisku ?
    Glib::RefPtr<Gtk::RcStyle> close_btn_rc_style = close_btn.get_modifier_style();
    close_btn_rc_style->set_xthickness(0);
    close_btn_rc_style->set_ythickness(0);
    close_btn.modify_style(close_btn_rc_style);

    //Dodajemy widgety do kontenera
    pack_start(icon, PACK_SHRINK);
    pack_start(title);
    pack_start(close_btn);

    set_size_request(-1, 18);
    set_spacing(3);
    show_all_children();
}

Emacs vs Vi by RMS

Kościół Emacs, wojny edytorowe i te sprawy by RMS. Znów stary filmik bo z 2006 roku (???) ale jeśli ktoś nie widział i niesłyszał to polecam bo warto… ;)

« Poprzednia stronaNastępna strona »