+++ /dev/null
-# Project: Acess GUI Window Manager
-
--include ../Makefile.cfg
-
-CPPFLAGS += -I../include
-
-DIR := Apps/AxWin/0.1
-BIN := ../AxWin0
-OBJ := main.o wm.o graphics.o desktop.o
-
--include ../Makefile.tpl
+++ /dev/null
-/*\r
-AxWin API\r
-*/\r
-\r
-#ifndef NULL\r
-# define NULL ((void*)0)\r
-#endif\r
-\r
-#ifndef _AXWIN_HEADER_H\r
-typedef unsigned char Uint8;\r
-typedef unsigned long Uint32;\r
-typedef unsigned int Uint;\r
-#endif\r
-\r
-typedef int (*wndproc_t)(void *handle, int message, int arg1, int arg2);\r
-\r
-typedef struct {\r
- short width, height;\r
- int bpp;\r
- void *data;\r
-} BITMAP;\r
-typedef struct {\r
- int x1, y1;\r
- int x2, y2;\r
-} RECT;\r
-\r
-\r
-//Flag Values\r
-#define WNDFLAG_SHOW 0x0001\r
-#define WNDFLAG_NOBORDER 0x0010\r
-\r
-//Window Messages\r
-enum MESSAGES {\r
- WM_NULL,\r
- WM_REPAINT,\r
- WM_GETTEXT,\r
- WM_SETTEXT,\r
- WM_SETTITLE,\r
- WM_GETTITLE\r
-};\r
-\r
-// === EXTERNAL FUNCTIONS ===\r
-extern void* WM_CreateWindow(int x, int y, int w, int h, wndproc_t wndProc, Uint flags);\r
-extern int WM_SendMessage(void *hwnd, int msg, int a1, int a2);\r
-\r
-// === DEFINES ===\r
-#define WM_SetText(hwnd, text) WM_SendMessage((hwnd), WM_SETTEXT, (int)((char*)(text)), 0)\r
-#define WM_SetTitle(hwnd, text) WM_SendMessage((hwnd), WM_SETTITLE, (int)((char*)(text)), 0)\r
+++ /dev/null
-/*\r
-AcessOS Window Manager\r
-Bitmaps\r
-HEADER\r
-*/\r
-\r
-Uint32 bmpCursor[] = { //16x32\r
- 0xF0000000,0x00000000,\r
- 0xFF000000,0x00000000,\r
- 0xF1F00000,0x00000000,\r
- 0xF11F0000,0x00000000,\r
- 0xF111F000,0x00000000,\r
- 0xF1111F00,0x00000000,\r
- 0xF11111F0,0x00000000,\r
- 0xF111111F,0x00000000,\r
- 0xF1111111,0xF0000000,\r
- 0xF1111111,0x1F000000,\r
- 0xF1111111,0x11F00000,\r
- 0xF111111F,0xFFFF0000,\r
- 0xF111F11F,0x00000000,\r
- 0xF11FF11F,0x00000000,\r
- 0xF1F00F11,0xF0000000,\r
- 0xFF000F11,0xF0000000,\r
- 0xF00000F1,0x1F000000,\r
- 0x000000F1,0x1F000000,\r
- 0x0000000F,0x11F00000,\r
- 0x0000000F,0x11F00000,\r
- 0x00000000,0xFF000000,\r
- 0x00000000,0x00000000,\r
- 0x00000000,0x00000000,\r
- 0x00000000,0x00000000,\r
- 0x00000000,0x00000000,\r
- 0x00000000,0x00000000,\r
-};\r
+++ /dev/null
-/*\r
-AcessOS Window Manager\r
-Desktop Window\r
-*/\r
-#include "axwin.h"\r
-#include "desktop_font.h"\r
-#include <string.h>\r
-\r
-#define DEBUG 0\r
-\r
-#define FGC 0xFFFFFFFF\r
-#define BGC 0xFF000000\r
-\r
-// === GLOBALS ===\r
- void* gHwnd = NULL;\r
- int gW = 640;\r
- int gH = 480;\r
- \r
-// === PROTOTYPES ===\r
-void Desktop_Init();\r
- int Desktop_WndProc(void *handle, int message, int arg1, int arg2);\r
-void Desktop_PrintAt(BITMAP *bmp, int x, int y, char *text);\r
-\r
-// === CODE ===\r
-void Desktop_Init()\r
-{\r
- gHwnd = WM_CreateWindow(0, 0, -1, -1, Desktop_WndProc, WNDFLAG_NOBORDER|WNDFLAG_SHOW);\r
- if(gHwnd == 0)\r
- {\r
- //write(giConsoleFP, 32, "Unable to create desktop window\n");\r
- return;\r
- }\r
- WM_SetTitle(gHwnd, "Desktop");\r
-}\r
-\r
-int Desktop_WndProc(void *handle, int message, int arg1, int arg2)\r
-{\r
- switch(message)\r
- {\r
- case WM_REPAINT:\r
- {\r
- BITMAP *bmp = (BITMAP*)arg1;\r
- memset( bmp->data, BGC, bmp->width*bmp->height*4 );\r
- Desktop_PrintAt( bmp, 0, 0, "CAB@1337!" );\r
- }\r
- break;\r
- \r
- default:\r
- return 0;\r
- }\r
- return 1; // Handled\r
-}\r
-\r
-void Desktop_PrintAt(BITMAP *bmp, int x, int y, char *text)\r
-{\r
- int j,k,w;\r
- Uint32 *buf;\r
- \r
- if( bmp == NULL || text == NULL )\r
- return;\r
-\r
- buf = bmp->data;\r
- w = bmp->width;\r
- buf += y*w+x;\r
- while(*text)\r
- {\r
- for(j=0;j<9;j++)\r
- {\r
- int c = cFONT_ASCII[(int)*text][j];\r
- for(k=0;k<8;k++)\r
- {\r
- if(c&(1<<(7-k))) buf[j*w+k] = FGC;\r
- else buf[j*w+k] = BGC;\r
- }\r
- buf[j*w+8] = BGC;\r
- }\r
- buf += 9;\r
- text++;\r
- }\r
-}\r
+++ /dev/null
-/*\r
-AcessOS Window Manager\r
-Desktop Window\r
-Font\r
-HEADER\r
-*/\r
-\r
-Uint8 cFONT_ASCII[][9] = {\r
-{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}, //0\r
-{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}, //4\r
-{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}, //8\r
-{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}, //C\r
-{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}, //10\r
-{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}, //14\r
-{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}, //18\r
-{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}, //1C\r
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x08,0x08}, //20+21\r
-{0x24,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x00}, {0x24,0x24,0xFF,0x24,0x24,0x24,0xFF,0x24,0x24}, //22+23\r
-{0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //24+25\r
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x10,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00}, //26+27\r
-{0x00,0x04,0x08,0x10,0x20,0x20,0x10,0x08,0x04}, {0x00,0x20,0x10,0x08,0x04,0x04,0x08,0x10,0x20}, //28+29 ()\r
-{0x54,0x38,0x54,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x10,0x10,0x7C,0x10,0x10,0x00,0x00}, //2A+2B *+\r
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x08}, {0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00}, //2C+2D ,-\r
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18}, {0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0x60}, //2E+2F ./\r
-{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C}, {0x1C,0x28,0x08,0x08,0x08,0x08,0x08,0x08,0x3E}, //30+31 01\r
-{0x3C,0x42,0x04,0x08,0x10,0x10,0x20,0x40,0x7E}, {0x3C,0x42,0x02,0x02,0x3C,0x02,0x02,0x42,0x7E}, //32+33 23\r
-{0x08,0x18,0x28,0x48,0x7E,0x08,0x08,0x08,0x3C}, {0x7E,0x40,0x40,0x38,0x04,0x02,0x02,0x04,0x38}, //34+35 45\r
-{0x1E,0x20,0x40,0x40,0x7C,0x42,0x42,0x42,0x18}, {0x7E,0x02,0x04,0x08,0x08,0x10,0x10,0x20,0x20}, //36+37 67\r
-{0x3C,0x42,0x42,0x42,0x3C,0x42,0x42,0x42,0x3C}, {0x3C,0x42,0x42,0x42,0x3E,0x02,0x02,0x04,0x78}, //38+39 89\r
-{0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00}, {0x00,0x00,0x18,0x00,0x00,0x18,0x30,0x60,0x00}, //3A+3B :;\r
-{0x00,0x00,0x0C,0x30,0x40,0x30,0x0C,0x00,0x00}, {0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00}, //3C+3D <=\r
-{0x00,0x00,0x30,0x0C,0x02,0x0C,0x30,0x00,0x00}, {0x3C,0x42,0x02,0x0C,0x10,0x10,0x00,0x30,0x00}, //3E+3F >?\r
-{0x3C,0x42,0x4E,0x52,0x52,0x4C,0x40,0x40,0x3C}, {0x18,0x24,0x24,0x42,0x7E,0x42,0x42,0x42,0x42}, //40+41 @A\r
-{0x7C,0x22,0x22,0x22,0x3C,0x22,0x22,0x22,0x7C}, {0x3C,0x42,0x40,0x40,0x40,0x40,0x40,0x42,0x3C}, //42+43 BC\r
-{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, //44+45 DE\r
-};\r
-#if 0\r
-00111100\r
-01000010\r
-01000000\r
-01000000\r
-01000000\r
-01000000\r
-01000000\r
-01000010\r
-00111100\r
-#endif\r
+++ /dev/null
-/*\r
-Acess OS Window Manager\r
-*/\r
-#include "header.h"\r
-\r
-#define ABS(x) ((x)<0?-(x):(x))\r
-#define PLOT(x,y,colour) (gScreenBuffer[(y)*SCREEN_WIDTH+(x)] = (colour))\r
-\r
-void draw_line(int x1, int y1, int x2, int y2, Uint32 colour)\r
-{\r
- int dy, dx;\r
- int i;\r
- float step;\r
- \r
- dy = ABS(y2 - y1);\r
- dx = ABS(x2 - x1);\r
- \r
- if(dx == 0) {\r
- if(y1 < y2) {\r
- for(i=y1;i<y2;i++)\r
- PLOT(x1, i, colour);\r
- } else {\r
- for(i=y2;i<y1;i++)\r
- PLOT(x1, i, colour);\r
- }\r
- }\r
- \r
- if(x1 < x2) {\r
- step = (dy/dx); step = (y2>y1?step:-step);\r
- for(i=x1;i<x2;i++) PLOT(i, y1+(int)(step*i), colour);\r
- } else {\r
- step = (dy/dx); step = (y2>y1?-step:step);\r
- for(i=x2;i<x1;i++) PLOT(i, y1+(int)(step*i), colour);\r
- }\r
-}\r
-\r
-void draw_rect(int x, int y, int w, int h, Uint32 colour)\r
-{\r
- Uint32 *p = gScreenBuffer+y*SCREEN_WIDTH+x;\r
- int i, j;\r
- \r
- for(j=0;j<h;j++) {\r
- for(i=0;i<w;i++) *(p+i) = colour;\r
- p += SCREEN_WIDTH;\r
- }\r
-}\r
-\r
-void draw_bmp(BITMAP *bmp, RECT *rc)\r
-{\r
- int w, h, i, j;\r
- Uint32 a;\r
- int r,g,b;\r
- Uint32 *buf, *bi;\r
- Uint16 *bi16;\r
- Uint8 *bi8;\r
- \r
- #if DEBUG\r
- k_printf("draw_bmp: (bmp=0x%x, rc=0x%x)\n", bmp, rc);\r
- #endif\r
- \r
- buf = gScreenBuffer+rc->y1*SCREEN_WIDTH+rc->x1;\r
- bi = bmp->data; bi16 = bmp->data; bi8 = bmp->data;\r
- w = bmp->width;\r
- h = bmp->height;\r
- \r
- #if DEBUG\r
- k_printf(" draw_bmp: bmp->bpp = %i\n", bmp->bpp);\r
- #endif\r
- \r
- switch(bmp->bpp)\r
- {\r
- // === 32bit Colour ===\r
- case 32:\r
- for(i = 0; i < h; i++)\r
- {\r
- for(j = 0; j < w; j++)\r
- {\r
- a = *bi >> 24;\r
- switch(a)\r
- {\r
- case 0xFF: //Fully Visible\r
- buf[j] = *bi;\r
- break;\r
- case 0x80: // 50/50\r
- r = ((*bi>>16)&0xFF) + ((*buf>>16)&0xFF);\r
- g = ((*bi>>8)&0xFF) + ((*buf>>8)&0xFF);\r
- b = ((*bi)&0xFF) + ((*buf)&0xFF);\r
- r >>= 1; g >>= 1; b >>= 1;\r
- buf[j] = (r<<16) | (g<<8) | b;\r
- break;\r
- case 0x00: // Fully Transparent\r
- break;\r
- default: // Everything else\r
- r = ((*bi>>16)&0xFF)*(255-a) + ((*buf>>16)&0xFF)*a;\r
- g = ((*bi>>8)&0xFF)*(255-a) + ((*buf>>8)&0xFF)*a;\r
- b = ((*bi)&0xFF)*(255-a) + ((*buf)&0xFF)*a;\r
- r >>= 8; g >>= 8; b >>= 8;\r
- buf[j] = (r<<16) | (g<<8) | b;\r
- break;\r
- }\r
- bi++;\r
- }\r
- buf += SCREEN_WIDTH;\r
- }\r
- break;\r
- }\r
-}\r
+++ /dev/null
-/*\r
-Acess OS GUI\r
-*/\r
-#ifndef _AXWIN_HEADER_H\r
-#define _AXWIN_HEADER_H\r
-\r
-#include <acess/sys.h>\r
-\r
-//CONSTANTS\r
-#define SCREEN_WIDTH 640\r
-#define SCREEN_HEIGHT 480\r
-#define SCREEN_PX_COUNT (SCREEN_WIDTH*SCREEN_HEIGHT)\r
-#define SCREEN_BUFFER_SIZE (SCREEN_WIDTH*SCREEN_HEIGHT*4)\r
-\r
-#define NULL ((void*)0)\r
-\r
-typedef uint32_t Uint32;\r
-typedef uint16_t Uint16;\r
-typedef uint8_t Uint8;\r
-typedef uint Uint;\r
-\r
-extern Uint32 *gScreenBuffer;\r
-\r
-#include "axwin.h"\r
-\r
-typedef struct sWINDOW{\r
- void *handle;\r
- RECT rc;\r
- char *title;\r
- int flags;\r
- int repaint;\r
- \r
- BITMAP bmp;\r
- \r
- struct sWINDOW *next, *prev;\r
- struct sWINDOW *first_child, *last_child;\r
- struct sWINDOW *parent;\r
- \r
- wndproc_t wndproc;\r
-} tWINDOW;\r
-\r
-//PROTOTYPES\r
-extern void wmUpdateWindows();\r
-extern void memcpyd(void *to, void *from, int count);\r
-extern void draw_line(int x1, int y1, int x2, int y2, Uint32 colour);\r
-extern void draw_rect(int x, int y, int w, int h, Uint32 colour);\r
-extern void draw_bmp(BITMAP *bmp, RECT *rc);\r
-\r
-#endif\r
+++ /dev/null
-/*\r
-AcessOS Basic LibC\r
-Malloc.c - Heap Manager\r
-*/\r
-\r
-#include "header.h"\r
-\r
-#define MAGIC 0xACE2ACED //AcessOS1\r
-#define MAGIC_FREE (~MAGIC) //AcessOS1\r
-#define BLOCK_SIZE 16 //Minimum\r
-\r
-//Typedefs\r
-typedef struct {\r
- Uint magic;\r
- Uint size;\r
-} heap_head;\r
-typedef struct {\r
- heap_head *header;\r
- Uint magic;\r
-} heap_foot;\r
-\r
-//Globals\r
-void *heap_start = NULL;\r
-void *heap_end;\r
-Uint endHeap;\r
-\r
-//Prototypes\r
-void *malloc(Uint bytes);\r
-void free(void *mem);\r
-void *realloc(Uint bytes, void *mem);\r
-void *extendHeap(int bytes);\r
-\r
-//Code\r
-/* Initialise Heap\r
- */\r
-void heap_init()\r
-{\r
- heap_start = (void*)( (gAxeHdr.loadto + gAxeHdr.length + 0xFFF) & 0xFFFFF000) ;\r
- heap_end = heap_start;\r
- extendHeap( gAxeHdr.maxmem );\r
- endHeap = (Uint)heap_start + gAxeHdr.maxmem;\r
-}\r
-\r
-void *malloc(Uint bytes)\r
-{\r
- Uint bestSize;\r
- Uint closestMatch = 0;\r
- Uint bestMatchAddr = 0;\r
- heap_head *curBlock = heap_start;\r
- \r
- if(heap_start == NULL) {\r
- heap_init();\r
- curBlock = heap_start;\r
- }\r
- \r
- bestSize = ((bytes+sizeof(heap_head)+sizeof(heap_foot))/BLOCK_SIZE+1)*BLOCK_SIZE; //Round up to block size\r
- \r
- while((Uint)curBlock < (Uint)heap_end)\r
- {\r
- if(curBlock->magic == MAGIC_FREE)\r
- {\r
- //foundFree = 1;\r
- if(curBlock->size == bestSize)\r
- break;\r
- if(bestSize < curBlock->size && (curBlock->size < closestMatch || closestMatch == 0)) {\r
- closestMatch = curBlock->size;\r
- bestMatchAddr = (Uint)curBlock;\r
- }\r
- } else if(curBlock->magic != MAGIC) {\r
- //Corrupt Heap\r
- return NULL;\r
- }\r
- curBlock = (heap_head*)((Uint)curBlock + curBlock->size);\r
- }\r
- \r
- if((Uint)curBlock < (Uint)heap_start) {\r
- //panic("malloc: Heap underrun for some reason\n");\r
- return NULL;\r
- }\r
- \r
- //Found a perfect match\r
- if((Uint)curBlock < (Uint)heap_end) {\r
- curBlock->magic = MAGIC;\r
- return (void*)((Uint)curBlock + sizeof(heap_head));\r
- }\r
- \r
- //Out of Heap Space\r
- if(!closestMatch)\r
- {\r
- #if 0\r
- curBlock = extendHeap(bestSize); //Allocate more\r
- if(curBlock == NULL) {\r
- //panic("malloc: Out of kernel heap memory\n");\r
- return NULL;\r
- }\r
- curBlock->magic = MAGIC;\r
- return (void*)((Uint)curBlock + sizeof(heap_head));\r
- #else\r
- return NULL;\r
- #endif\r
- }\r
- \r
- //Split Block?\r
- if(closestMatch - bestSize > BLOCK_SIZE) {\r
- heap_foot *foot;\r
- curBlock = (heap_head*)bestMatchAddr;\r
- curBlock->magic = MAGIC;\r
- curBlock->size = bestSize;\r
- foot = (heap_foot*)(bestMatchAddr + bestSize - sizeof(heap_foot));\r
- foot->header = curBlock;\r
- foot->magic = MAGIC;\r
-\r
- curBlock = (heap_head*)(bestMatchAddr + bestSize);\r
- curBlock->magic = MAGIC_FREE;\r
- curBlock->size = closestMatch - bestSize;\r
- \r
- foot = (heap_foot*)(bestMatchAddr + closestMatch - sizeof(heap_foot));\r
- foot->header = curBlock;\r
- \r
- ((heap_head*)bestMatchAddr)->magic = MAGIC; //mark as used\r
- return (void*)(bestMatchAddr + sizeof(heap_head));\r
- }\r
- \r
- //Don't Split the block\r
- ((heap_head*)bestMatchAddr)->magic = MAGIC;\r
- return (void*)(bestMatchAddr+sizeof(heap_head));\r
-}\r
-\r
-/* Free previously allocated memory\r
- */\r
-void free(void *mem)\r
-{\r
- heap_head *head = mem;\r
- \r
- if(head->magic != MAGIC) //Valid Heap Address\r
- return;\r
- \r
- head->magic = MAGIC_FREE;\r
- \r
- //Unify Right\r
- if((Uint)head + head->size < (Uint)heap_end)\r
- {\r
- heap_head *nextHead = (heap_head*)((Uint)head + head->size);\r
- if(nextHead->magic == MAGIC_FREE) { //Is the next block free\r
- head->size += nextHead->size; //Amalgamate\r
- nextHead->magic = 0; //For Security\r
- }\r
- }\r
- //Unify Left\r
- if((Uint)head - sizeof(heap_foot) > (Uint)heap_start)\r
- {\r
- heap_head *prevHead;\r
- heap_foot *prevFoot = (heap_foot *)((Uint)head - sizeof(heap_foot));\r
- if(prevFoot->magic == MAGIC) {\r
- prevHead = prevFoot->header;\r
- if(prevHead->magic == MAGIC_FREE) {\r
- prevHead->size += head->size; //Amalgamate\r
- head->magic = 0; //For Security\r
- }\r
- }\r
- }\r
-}\r
-\r
-/* Create a new block at the end of the heap area\r
- */\r
-void *extendHeap(int bytes)\r
-{\r
- heap_head *head = heap_end;\r
- heap_foot *foot = (heap_foot*)(((Uint)heap_end) + bytes-sizeof(heap_foot));\r
- \r
- //Create New Block\r
- head->magic = MAGIC_FREE; //Unallocated\r
- head->size = bytes;\r
- \r
- foot->header = head;\r
- foot->magic = MAGIC;\r
- \r
- //Combine with previous block if nessasary\r
- if(heap_end != heap_start && ((heap_foot*)((Uint)heap_end-sizeof(heap_foot)))->magic == MAGIC) {\r
- heap_head *tmpHead = ((heap_foot*)((Uint)heap_end-sizeof(heap_foot)))->header;\r
- if(tmpHead->magic == MAGIC_FREE) {\r
- tmpHead->size += bytes;\r
- foot->header = tmpHead;\r
- head = tmpHead;\r
- }\r
- }\r
- \r
- heap_end = (void*) ((Uint)foot+sizeof(heap_foot));\r
- return head;\r
-}\r
-\r
-/* Reallocate a block of memory\r
- */\r
-void *realloc(Uint bytes, void *oldPos)\r
-{\r
- void *ret;\r
- heap_head *head;\r
- \r
- if(oldPos == NULL) {\r
- return malloc(bytes);\r
- }\r
- \r
- //Check for free space after block\r
- head = (heap_head*)((Uint)oldPos-sizeof(heap_head));\r
- \r
- //Hack to used free's amagamating algorithym and malloc's splitting\r
- free(oldPos);\r
- \r
- //Allocate new memory\r
- ret = malloc(bytes);\r
- if(ret == NULL)\r
- return NULL;\r
- \r
- //Copy Old Data\r
- if((Uint)ret != (Uint)oldPos)\r
- {\r
- Uint *in, *out;\r
- Uint count;\r
- count = head->size - sizeof(heap_head) - sizeof(heap_foot);\r
- if((Uint)ret < (Uint)out)\r
- {\r
- out = ret; in = oldPos;\r
- while(count--) *out++ = *in++;\r
- }\r
- else\r
- {\r
- out = ret; in = oldPos;\r
- out += count; in += count;\r
- while(count--) *--out = *--in;\r
- }\r
- }\r
- \r
- //Return\r
- return ret;\r
-}\r
+++ /dev/null
-\r
-global _k_fopen\r
-global _k_fclose\r
-global _k_ftell\r
-global _k_fseek\r
-global _k_fread\r
-global _k_fwrite\r
-global _k_fstat\r
-;global _k_printf\r
-global _k_puts\r
-global _k_opendir\r
-global _k_readdir\r
-global _k_exec\r
-global _k_ioctl\r
-\r
-%macro START_FRAME 0\r
- push ebp\r
- mov ebp, esp\r
- push ebx\r
- push ecx\r
- push edx\r
-%endmacro\r
-%macro END_FRAME 0\r
- pop edx\r
- pop ecx\r
- pop ebx\r
- pop ebp\r
-%endmacro\r
-\r
-_k_fopen:\r
- START_FRAME\r
- mov eax, 2 ;SYS_OPEN\r
- mov ebx, DWORD [ebp+8]\r
- mov ecx, DWORD [ebp+12]\r
- mov edx, 0\r
- int 0xAC\r
- END_FRAME\r
- ret\r
- ;jmp 0x0010001c\r
-_k_fclose:\r
- START_FRAME\r
- mov eax, 3 ;SYS_CLOSE\r
- mov ebx, DWORD [ebp+8]\r
- int 0xAC\r
- END_FRAME ;Restore Stack Frame\r
- ret\r
- ;jmp 0x00100022\r
-_k_ftell:\r
- jmp 0x0010002e\r
-_k_fseek:\r
- jmp 0x001000a9\r
-_k_fread:\r
- START_FRAME\r
- mov eax, 4 ;SYS_READ\r
- mov ebx, DWORD [ebp+8]\r
- mov ecx, DWORD [ebp+12]\r
- mov edx, DWORD [ebp+16]\r
- int 0xAC\r
- END_FRAME\r
- ret\r
-_k_fwrite:\r
- START_FRAME\r
- mov eax, 5 ;SYS_WRITE\r
- mov ebx, DWORD [ebp+8]\r
- mov ecx, DWORD [ebp+12]\r
- mov edx, DWORD [ebp+16]\r
- int 0xAC\r
- END_FRAME\r
- ret\r
-_k_fstat:\r
- START_FRAME\r
- mov eax, 10 ;SYS_FSTAT\r
- mov ebx, DWORD [ebp+8]\r
- mov ecx, DWORD [ebp+12]\r
- int 0xAC\r
- END_FRAME\r
- ret\r
-;_k_printf:\r
-; jmp 0x1000a4\r
-_k_puts:\r
- jmp 0x105418\r
-_k_opendir:\r
- START_FRAME\r
- mov eax, 2 ;SYS_OPEN\r
- mov ebx, DWORD [ebp+8]\r
- mov ecx, 0\r
- mov edx, 0\r
- int 0xAC\r
- END_FRAME\r
- ret\r
- ;jmp 0x00100050\r
-_k_readdir:\r
- START_FRAME\r
- mov eax, 11 ;SYS_READDIR\r
- mov ebx, DWORD [ebp+8]\r
- mov ecx, DWORD [ebp+12]\r
- int 0xAC\r
- END_FRAME\r
- ret\r
-\r
-_k_exec:\r
- START_FRAME\r
- mov eax, 14 ;SYS_EXEC\r
- mov ebx, DWORD [ebp+8]\r
- int 0xAC\r
- END_FRAME\r
- ret\r
-\r
-_k_ioctl:\r
- START_FRAME\r
- mov eax, 12 ;SYS_IOCTL\r
- mov ebx, DWORD [ebp+8]\r
- mov ecx, DWORD [ebp+12]\r
- mov edx, DWORD [ebp+16]\r
- int 0xAC\r
- END_FRAME\r
- ret\r
+++ /dev/null
-/*\r
-Acess OS Window Manager\r
-*/\r
-#include "header.h"\r
-#include "bitmaps.h"\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <string.h>\r
-\r
-#define USE_MOUSE 1\r
-\r
-//GLOBALS\r
- int giConsoleFP = -1;\r
- int giScreenFP = -1;\r
- int giScreenMode = 1;\r
- int giScreenWidth = SCREEN_WIDTH;\r
- int giScreenHeight = SCREEN_HEIGHT;\r
- int giScreenDepth = 32;\r
- int giScreenSize = SCREEN_WIDTH*SCREEN_HEIGHT*32/8;\r
-Uint32 *gScreenBuffer;\r
-#if USE_MOUSE\r
-int giMouseFP = -1;\r
-Uint32 gCursorBMP[sizeof(bmpCursor)*2] = {0};\r
-int mouseX=0, mouseY=0;\r
-Uint8 buttonState;\r
-#endif\r
-\r
-//PROTOTYPES\r
-extern void Desktop_Init();\r
-extern void heap_init();\r
-void UpdateScreen();\r
-#if USE_MOUSE\r
-void UpdateMouse();\r
-void BuildCursor();\r
-void DrawCursor();\r
-#endif\r
-void memsetd(void *to, long val, int count);\r
-\r
-//CODE\r
-int main(void)\r
-{\r
- int tmp;\r
- \r
- giConsoleFP = open("/Devices/vterm/1", OPENFLAG_WRITE);\r
- \r
- printf("AcessOS GUI version 1\n");\r
- printf("Opening and Initialising Video and Mouse...");\r
- \r
- #if USE_MOUSE\r
- giMouseFP = open("/Devices/ps2mouse", OPENFLAG_READ);\r
- #endif\r
- \r
- tmp = giScreenWidth; ioctl(giConsoleFP, 4, &tmp); // Width\r
- tmp = giScreenHeight; ioctl(giConsoleFP, 5, &tmp); // Height\r
- tmp = 1; ioctl(giConsoleFP, 6, &tmp); // Buffer Mode\r
- \r
- giScreenSize = giScreenWidth*giScreenHeight*giScreenDepth/8;\r
- \r
- #if USE_MOUSE\r
- ioctl(giMouseFP, 2, &giScreenWidth); //Set Max X\r
- ioctl(giMouseFP, 3, &giScreenHeight); //Set Max Y\r
- #endif\r
- printf("Done.\n");\r
- \r
- // Allocate Screen Buffer\r
- gScreenBuffer = malloc(giScreenSize);\r
- if(gScreenBuffer == NULL)\r
- printf("Unable to allocate double buffer (gScreenBuffer)\n");\r
- \r
- UpdateScreen();\r
- Desktop_Init();\r
- #if USE_MOUSE\r
- BuildCursor(); //Create Cursor\r
- #endif\r
- \r
- for(;;) {\r
- memset(gScreenBuffer, 0x6666FF, giScreenSize); // Set Background Colour\r
- wmUpdateWindows();\r
- #if USE_MOUSE\r
- UpdateMouse();\r
- DrawCursor();\r
- #endif\r
- UpdateScreen();\r
- }\r
- \r
- return 1;\r
-}\r
-\r
-/* Copy from the buffer to the screen\r
- */\r
-void UpdateScreen()\r
-{\r
- printf("Updating Framebuffer.\n");\r
- seek(giScreenFP, 0, 1); //SEEK SET\r
- write(giScreenFP, giScreenSize, gScreenBuffer);\r
-}\r
-\r
-#if USE_MOUSE\r
-void UpdateMouse()\r
-{\r
- struct {\r
- int x, y, scroll;\r
- Uint8 buttons;\r
- } data;\r
- //k_printf("Updating Mouse State...");\r
- \r
- seek(giMouseFP, 0, 1);\r
- read(giMouseFP, sizeof(data), &data);\r
- \r
- mouseX = data.x; mouseY = data.y;\r
- //Button Press\r
- if(data.buttons & ~buttonState) {\r
- //wmMessageButtonDown();\r
- }\r
- //Button Release\r
- if(~data.buttons & buttonState) {\r
- //wmMessageButtonUp();\r
- }\r
- \r
- buttonState = data.buttons; //Update Button State\r
- //k_printf("Done.\n");\r
-}\r
-\r
-void DrawCursor()\r
-{\r
- int i,j;\r
- Uint32 *buf, *bi;\r
- bi = gCursorBMP;\r
- buf = gScreenBuffer + mouseY*giScreenWidth + mouseX;\r
- for(i=0;i<24;i++)\r
- {\r
- for(j=0;j<16;j++)\r
- {\r
- if(*bi&0xFF000000)\r
- {\r
- buf[j] = *bi&0xFFFFFF;\r
- }\r
- bi++;\r
- }\r
- buf += giScreenWidth;\r
- }\r
-}\r
-\r
-void BuildCursor()\r
-{\r
- int i,j;\r
- Uint32 px;\r
- Uint32 *buf, *bi;\r
- bi = bmpCursor;\r
- buf = gCursorBMP;\r
- for(i=0;i<sizeof(bmpCursor)/8;i++)\r
- {\r
- for(j=0;j<8;j++)\r
- {\r
- px = (*bi & (0xF << ((7-j)*4) )) >> ((7-j)*4);\r
- if( px & 0x1 )\r
- {\r
- if(px & 8) *buf = 0xFF000000; //Black (100% Alpha)\r
- else *buf = 0xFFFFFFFF; //White (100% Alpha)\r
- }\r
- else\r
- *buf = 0; // 0% Alpha\r
- buf++;\r
- }\r
- bi++;\r
- for(j=0;j<8;j++)\r
- {\r
- px = (*bi & (0xF << ((7-j)*4) )) >> ((7-j)*4);\r
- if( px & 0x1 )\r
- {\r
- if(px & 8) *buf = 0xFF000000; // Black (100% Alpha)\r
- else *buf = 0xFFFFFFFF; // White (100% Alpha)\r
- }\r
- else\r
- {\r
- *buf = 0; // 0% Alpha\r
- }\r
- buf++;\r
- }\r
- bi++;\r
- }\r
-}\r
-#endif\r
+++ /dev/null
-; AcessBasic Test Command Prompt\r
-; Assembler Stub\r
-\r
-[BITS 32]\r
-\r
-extern _main\r
-extern codeLength\r
-extern loadTo\r
-extern entrypoint\r
-extern magic\r
-\r
-global start\r
-global _gAxeHdr\r
-\r
-FLAGS equ 0\r
-MAXMEM equ 0x400000 ; 4Mb\r
-\r
-;Header\r
-db 'A'\r
-db 'X'\r
-db 'E'\r
-db 0\r
-;Size\r
-_gAxeHdr:\r
-dd codeLength ;Code Size\r
-dd loadTo ;Load Address\r
-dd entrypoint ;Entrypoint\r
-dd MAXMEM ;Maximum Used Memory\r
-dd FLAGS ;Flags\r
-dd magic+FLAGS+MAXMEM\r
-\r
-;Code\r
-start:\r
- push eax\r
- call _main\r
- \r
- ret\r
- ret\r
- \r
-;String Compare\r
-_strcmp:\r
- push ebp\r
- mov ebp, esp\r
- push ebx\r
- push ecx\r
- \r
- mov ebx, [ebp+8]\r
- mov ecx, [ebp+12]\r
-.cmp:\r
- mov al, BYTE [ecx]\r
- cmp BYTE [ebx], al\r
- jnz .out\r
- cmp BYTE [ecx],0\r
- jnz .out\r
- inc ebx\r
- inc edx\r
- jmp .cmp\r
-.out:\r
- mov eax, DWORD 0\r
- mov al, BYTE [ebx]\r
- sub al, BYTE [ecx]\r
- ;Cleanup\r
- pop ecx\r
- pop ebx\r
- pop ebp\r
- ret\r
- \r
-;String Copy\r
-_strcpy:\r
- push ebp\r
- mov ebp, esp\r
- push ebx\r
- push ecx\r
- push edx\r
- mov ebx, [ebp+8] ;Src\r
- mov ecx, [ebp+12] ;Dest\r
-.cmp:\r
- cmp BYTE [ebx], 0\r
- jnz .out\r
- mov dl, BYTE [ebx]\r
- mov BYTE [ecx], dl\r
- inc ebx\r
- inc ecx\r
- jmp .cmp\r
-.out: ;Cleanup\r
- pop edx\r
- pop ecx\r
- pop ebx\r
- pop ebp\r
- ret\r
-\r
- \r
-[section .bss]\r
-[global _startHeap]\r
-[global _endHeap]\r
-_startHeap:\r
-resb 0x4000 ;Heap Space\r
-_endHeap:\r
+++ /dev/null
-/*\r
-Acess OS GUI\r
-Window Manager\r
-*/\r
-#include "header.h"\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-\r
-#define DEBUG 0\r
-#define EXPORT \r
-\r
-// === STRUCTURES ===\r
-typedef struct sWINDOW_LIST {\r
- struct sWINDOW_LIST *next;\r
- tWINDOW *wnd;\r
-} tWINDOW_LIST;\r
-\r
-// === IMPORTS ===\r
-extern int giScreenWidth,giScreenHeight;\r
-\r
-//GLOBALS\r
-static tWINDOW *hwndRootWindow = NULL;\r
-static tWINDOW_LIST *windowList = NULL;\r
-\r
-//PROTOTYPES\r
-void wmDrawWindow(tWINDOW *wnd);\r
-void wmRepaintWindow(tWINDOW *wnd);\r
-void wmRepaintScreen(tWINDOW_LIST *ent);\r
-void wmInvalidateWindow(tWINDOW *wnd);\r
-\r
-//CODE\r
-void wmUpdateWindows()\r
-{\r
- if(windowList == NULL) return;\r
- wmRepaintScreen(windowList);\r
- //wmRepaintWindow(hwndRootWindow);\r
-}\r
-\r
-EXPORT void *WM_CreateWindow(int x, int y, int w, int h, wndproc_t wndProc, Uint flags)\r
-{\r
- tWINDOW *tmpWindow;\r
- tWINDOW_LIST *tmpListEnt;\r
- \r
- \r
- #if DEBUG\r
- //k_printf("WM_CreateWindow: (x=%i,y=%i,w=%i,h=%i,wndProc=0x%x,flags=0x%x)\n", x,y,w,h,wndProc,flags);\r
- #endif\r
- \r
- if(x < 0 || y < 0 || wndProc == NULL)\r
- return 0;\r
- \r
- tmpWindow = (tWINDOW*)malloc(sizeof(tWINDOW));\r
- if(tmpWindow == NULL)\r
- return NULL;\r
- \r
- #if DEBUG\r
- //k_printf(" WM_CreateWindow: tmpWindow = 0x%x\n", tmpWindow);\r
- #endif\r
- \r
- tmpWindow->handle = tmpWindow;\r
- tmpWindow->flags = flags;\r
- tmpWindow->wndproc = wndProc;\r
- tmpWindow->bmp.bpp = 32;\r
- tmpWindow->bmp.width = (w==-1?giScreenWidth:w);\r
- tmpWindow->bmp.height = (h==-1?giScreenHeight:h);\r
- tmpWindow->bmp.data = (void *) malloc(4*tmpWindow->bmp.width*tmpWindow->bmp.height);\r
- if(tmpWindow->bmp.data == NULL)\r
- {\r
- free(tmpWindow);\r
- return NULL;\r
- }\r
- tmpWindow->rc.x1 = x;\r
- tmpWindow->rc.y1 = y;\r
- tmpWindow->rc.x2 = x + tmpWindow->bmp.width;\r
- tmpWindow->rc.y2 = y + tmpWindow->bmp.height;\r
- tmpWindow->next = NULL;\r
- tmpWindow->prev = NULL;\r
- tmpWindow->first_child = NULL;\r
- tmpWindow->last_child = NULL;\r
- tmpWindow->parent = NULL;\r
- \r
- if(flags & WNDFLAG_SHOW)\r
- {\r
- tmpListEnt = malloc(sizeof(tWINDOW_LIST));\r
- tmpListEnt->wnd = tmpWindow;\r
- tmpListEnt->next = windowList;\r
- windowList = tmpListEnt;\r
- }\r
- \r
- if(hwndRootWindow == NULL)\r
- {\r
- hwndRootWindow = tmpWindow;\r
- }\r
- else\r
- {\r
- if(hwndRootWindow->first_child == NULL)\r
- {\r
- hwndRootWindow->last_child = tmpWindow;\r
- hwndRootWindow->first_child = tmpWindow;\r
- }\r
- else\r
- {\r
- hwndRootWindow->last_child->next = tmpWindow;\r
- tmpWindow->prev = hwndRootWindow->last_child;\r
- tmpWindow->prev->next = tmpWindow;\r
- hwndRootWindow->last_child = tmpWindow;\r
- }\r
- tmpWindow->parent = hwndRootWindow;\r
- }\r
- \r
- wmInvalidateWindow(tmpWindow);\r
- \r
- return tmpWindow;\r
-}\r
-\r
-EXPORT int WM_SendMessage(void *hwnd, int msg, int a1, int a2)\r
-{\r
- if(hwnd == NULL || ((tWINDOW*)hwnd)->wndproc == NULL)\r
- {\r
- //k_printf("WM_SendMessage: ERROR - Window is undefined\n");\r
- return -1;\r
- }\r
- return ((tWINDOW*)hwnd)->wndproc( ((tWINDOW*)hwnd)->handle, msg, a1, a2 );\r
-}\r
-\r
-void wmRepaintWindow(tWINDOW *wnd)\r
-{\r
- tWINDOW *child;\r
- \r
- if(wnd->repaint == 1)\r
- {\r
- for(child = wnd->first_child; child != NULL; child = child->next) {\r
- wmRepaintWindow(child);\r
- }\r
- WM_SendMessage(wnd, WM_REPAINT, (Uint)&wnd->bmp, 0);\r
- wmDrawWindow(wnd);\r
- }\r
-}\r
-\r
-void wmRepaintScreen(tWINDOW_LIST *ent)\r
-{\r
- #if DEBUG\r
- //k_printf("wmRepaintScreen: (ent=0x%x)\n", ent);\r
- #endif\r
- if(ent == NULL)\r
- return;\r
- if(ent->wnd->repaint == 1)\r
- {\r
- #if DEBUG\r
- //k_printf("wmRepaintScreen: ent->wnd=0x%x\n", ent->wnd);\r
- #endif\r
- WM_SendMessage(ent->wnd, WM_REPAINT, (Uint)&ent->wnd->bmp, 0);\r
- #if DEBUG\r
- //k_printf("wmRepaintScreen: ent->wnd=0x%x\n", ent->wnd);\r
- #endif\r
- wmDrawWindow(ent->wnd);\r
- }\r
- if(ent->next != NULL)\r
- {\r
- wmRepaintScreen(ent->next);\r
- }\r
-}\r
-\r
-void wmDrawWindow(tWINDOW *wnd)\r
-{\r
- #if DEBUG\r
- //k_printf("wmDrawWindow: (wnd = 0x%x)\n", wnd);\r
- #endif\r
- if(wnd->flags & WNDFLAG_SHOW) {\r
- #if DEBUG\r
- //k_printf(" wmDrawWindow: Drawing Window\n");\r
- #endif\r
- draw_bmp(&wnd->bmp, &wnd->rc);\r
- }\r
-}\r
-\r
-void wmInvalidateWindow(tWINDOW *wnd)\r
-{\r
- tWINDOW *parent;\r
- wnd->repaint = 1;\r
- \r
- while( (parent = wnd->parent) )\r
- parent->repaint = 1;\r
-}\r