Pickshit is a pointless game where you need to clean the shits that apear
around. Isn't actually game because there is no objective to complete. It's just an exercise in games developing know as pick stick.
The "game" was develop using allegro library so you need to have it installed to compile the game. I'm working on a better prototype.
You can download the game code/files here, and compile using this:
$ gcc -o pickshit pickshit.c -lalleg
Controls:
Arrows to move
ESC to exit
screenshot:
See you...
Cheers
segunda-feira, 4 de abril de 2011
terça-feira, 8 de março de 2011
Boot hello world
; Tell the compiler that this is the 0 address
[ORG 0]
jmp 07C0h:start ; Jump to start
msg db "Hello boot world ", 2, 0 ; My string
; the 2 byte should provide some fun
start:
; Setting up the segment registers
mov ax, cs
mov ds, ax
mov es, ax
; Writing the string
mov si, msg
print: lodsb
cmp al, 0
je hang
mov ah, 0Eh
mov bx, 7
int 010h ; BIOS video service interrupt
jmp print
hang:
jmp hang
times 510-($-$$) db 0
dw 0AA55h
.I saw this here, so is not my merit..
to run:
copy this to a .asm file, e.g. b.asm, then assemble it with
$ nasm -o b.bin b.asm
and finaly write it to some pendrive with
dd if=b.bin of=/dev/YOURPENDRIVE
e.g $ dd if=b.bin of=/dev/sdc
Boot the pendrive and you should get a funny message on screen =)
if you have qemu installed you can boot directly the binary
$ qemu -hda b.bin
domingo, 9 de janeiro de 2011
Revised tree
I have to make some changes in tree.c and tree.h, so del_branch
can be implemented easily!
Code:
tree.h
tree.c
common.c
test.c
can be implemented easily!
Code:
tree.h
#ifndef GKO_TREE_H
#define GKO_TREE_H
#include "stack.h"
#include "common.h"
struct branch {
char *name;
char *data;
struct branch *cont;
struct branch *next;
} branch;
void init_tree (struct branch *, char *, char *) ;
void set_branch (struct branch *, char *, char *);
struct branch * get_branch (struct branch *, char *);
void del_branch (struct branch *);
#endif
tree.c
#include "tree.h"
/* Initialize a Tree, set the root node */
void
init_tree (struct branch *t, char *name, char *data)
{
cpystr (&t->name, name);
cpystr (&t->data, data);
t->cont = NULL;
t->next = NULL;
}
/* Create a new struct branch or edit an existent one */
void
set_branch (struct branch *t, char *name, char *data)
{
struct branch *b;
struct branch *prior;
if (!t || !name || !data)
pexit ("set_branch: NULL argument call\n");
for (b = t->cont, prior = NULL; b; prior = b, b = b->next) {
if (! strcmp (b->name, name)) {
free (b->data);
cpystr (&b->data, data);
return;
}
}
b = xmalloc (sizeof (struct branch));
init_tree (b, name, data);
if (!prior) /* if there is no content in branch *t, the prior remains NULL */
t->cont = b;
else
prior->next = b;
}
/* Return the address of a struct branch */
struct branch *
get_branch (struct branch *t, char *name)
{
struct branch *b;
if (!t || !name)
pexit ("get_brach: NULL argument call\n");
for (b = t->cont; b; b = b->next)
if (! strcmp (b->name, name))
return b;
return NULL;
}
/* Delete a struct branch an everything below that node */
void
del_branch (struct branch *t)
{
if (t->cont)
del_branch (t->cont);
if (t->next)
del_branch (t->next);
free (t->name);
free (t->data);
free (t);
}
common.c
#include "common.h"
void
pexit (const char *msg)
{
perror (msg);
exit (EXIT_FAILURE);
}
void *
xmalloc (size_t siz)
{
void *n = malloc (siz);
if (!n)
pexit ("malloc");
return n;
}
void
cpystr (char **dst, char *src)
{
int len = strlen (src) + 1;
*dst = xmalloc (len);
strncpy (*dst, src, len);
}
test.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "tree.h"
main ()
{
struct branch *myt = xmalloc (sizeof (struct branch));
struct branch *buf;
init_tree (myt, "root", "root_data");
set_branch (myt, "etc", "etc_data");
set_branch (myt, "usr", "usr_data");
buf = get_branch (myt, "etc");
set_branch (buf, "rc.conf", "rc.conf data");
set_branch (myt, "etc", "etc_edited_data");
del_branch (myt);
return 0;
}
sexta-feira, 7 de janeiro de 2011
Middleware manager..
Yeap, I got a job. Intern on middleware management area.. I really like it.. I have
close contact with commercial aplications and linux/unix environments... and the warm/pressure of the businesses.. There are nice guys there.. some times looks like an arena.. but with little fat funny guys instead of big muscle losers.. :-)
by the way.. an tree prototype...
tree.h
tree.c
driver
MAYBE I work more on this..
close contact with commercial aplications and linux/unix environments... and the warm/pressure of the businesses.. There are nice guys there.. some times looks like an arena.. but with little fat funny guys instead of big muscle losers.. :-)
by the way.. an tree prototype...
tree.h
#ifndef GKO_TREE_H
#define GKO_TREE_H
#include "stack.h"
#include "ll.h"
#include "common.h"
typedef struct branch {
char *name;
char *data;
ll cont;
struct branch *next;
} branch;
void init_tree (branch *, char *, char *) ;
void set_branch (branch *, char *, char *);
branch *get_branch (branch *, char *);
#endif
tree.c
#include "tree.h"
/* Initialize a Tree, set the root node */
void
init_tree (branch *t, char *name, char *data)
{
cpystr (&t->name, name);
cpystr (&t->data, data);
init_ll (&t->cont);
t->next = NULL;
}
/* Create a new branch or edit an existent one */
void
set_branch (branch *t, char *name, char *data)
{
lln **node = search_lln (&t->cont, name);
branch *b;
if (node) { /* edit branch */
b = node[0]->data; /* the address of found branch */
free (b->data);
cpystr (&b->data, data);
} else { /* create a brand new branch */
b = xmalloc (sizeof (branch));
init_tree (b, name, data);
}
add_lln (&t->cont, name, b); /* tree contains branch */
}
/* Return the address of a branch */
branch *
get_branch (branch *t, char *name)
{
lln **node = search_lln (&t->cont, name);
if (node)
return node[0]->data; /* return void * don't need casts */
return NULL;
}
/* Delete a branch an everything below that node */
/* @TODO */
void
del_branch ()
{
}
driver
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "tree.h"
main ()
{
branch myt;
branch *buf;
init_tree (&myt, "root", "root_data");
set_branch (&myt, "etc", "etc_data");
set_branch (&myt, "usr", "usr_data");
buf = get_branch (&myt, "etc");
printf ("Searched %s\n", buf->data);
set_branch (buf, "rc.conf", "rc.conf data");
buf = get_branch (buf, "rc.conf");
printf ("Searched %s\n", buf->data);
buf = get_branch (&myt, "usr");
printf ("User data? %s\n", buf->data);
set_branch (&myt, "etc", "etc_edited_data");
buf = get_branch (&myt, "etc");
printf ("Searched %s\n", buf->data);
return 0;
}
MAYBE I work more on this..
segunda-feira, 22 de novembro de 2010
Prototype maker 2.0
There is no patter alignment anymore .. !
# Create the prototypes for all functions
# on a given C source file
use strict;
use warnings;
my @ctypes = qw(
void
unsigned
signed
long
short
int
float
double
struct
char
static
const
);
my @contents = <>;
for my $line (0 .. $#contents) {
my $lref = \$contents[$line];
my $prot = '';
for my $type (@ctypes) {
if ($$lref =~ /^$type/) {
while ($contents[$line] !~ /\{/) { # seek for {
$prot .= "$contents[$line++] ";
}
chop $prot; # the last space
$prot =~ s/\n//go; # remove LFs
$prot =~ s/\w*,/, /go; # remove argument intentifiers
$prot =~ s/\w*\)/)/go; # remove the last argument
$prot .= ';'; # append a semicolon
print $prot, "\n";
next;
}
}
}
sábado, 20 de novembro de 2010
Perl script to generate basic prototypes..
Typedefs are not supported and you need to code your
functions with follow patter:
type
function_indetifier (list_of_parameters)
{ ... hereafter makes no difference
usage: cat souce.c | perl prot.pl > prots.txt
then copy and paste where you want...
note: I will coment that hash implementation soon..
functions with follow patter:
type
function_indetifier (list_of_parameters)
{ ... hereafter makes no difference
usage: cat souce.c | perl prot.pl > prots.txt
then copy and paste where you want...
# Create the prototypes for all functions
# on a given C source file
use strict;
use warnings;
my @ctypes = qw(
unsigned
signed
long
short
int
float
double
struct
char
static
const
);
my @contents = <>;
for my $line (0 .. $#contents) {
my $lref = \$contents[$line];
my $prot = '';
for (@ctypes) {
if ($$lref =~ /^$_/) {
my $func = $contents[++$line];
$func =~ s/\w*,/,/g;
$func =~ s/\w*\)/)/g;
$prot = "$$lref $func;";
$prot =~ s/\n//g;
print "$prot\n";
next;
}
}
}
test: http://ideone.com/5tE0Fnote: I will coment that hash implementation soon..
quarta-feira, 10 de novembro de 2010
Mini web server in perl (really small han?)
use strict;
use warnings;
use LWP;
use HTTP::Daemon;
# the parameters are
# the user/group user to restrict permissions, the port (default 80)
# the local addres (default locahost)
# respectivaly
my ($userg, $port, $laddres) = @ARGV;
$userg or die 'You need to suply a nonroot user/group as first parameter';
my ($user, $group) = split ('/', $userg);
$port = 80 unless $port;
$laddres = 'localhost' unless $laddres;
my $server = new HTTP::Daemon (
LocalAddr => $laddres,
LocalPort => $port,
Listen => 5,
Reuse => 1,
) || die $!;
$> = getpwnam $user || die $!;
$) = getgrnam $group || die $!;
while (my $con = $server->accept()) {
my $pid = fork();
if (!$pid) {
my $req = $con->get_request();
print $req->as_string();
my $file = $req->url();
$file =~ s/^.//g;
$con->send_file_response($file);
} elsif ($pid) { next;
} else { print STDERR "fork: $!\n" };
}
Assinar:
Postagens (Atom)

