Big rewrite of AxWin to get it to compile and run
authorJohn Hodge <[email protected]>
Sat, 24 Apr 2010 14:17:02 +0000 (22:17 +0800)
committerJohn Hodge <[email protected]>
Sat, 24 Apr 2010 14:17:02 +0000 (22:17 +0800)
18 files changed:
Kernel/Makefile.BuildNum
Usermode/Applications/axwin2_src/Shell_src/main.c
Usermode/Applications/axwin2_src/WM/Makefile
Usermode/Applications/axwin2_src/WM/common.h
Usermode/Applications/axwin2_src/WM/interface.c [new file with mode: 0644]
Usermode/Applications/axwin2_src/WM/main.c
Usermode/Applications/axwin2_src/WM/messages.c
Usermode/Applications/axwin2_src/WM/video.c
Usermode/Libraries/libaxwin2.so_src/Makefile
Usermode/Libraries/libaxwin2.so_src/common.h
Usermode/Libraries/libaxwin2.so_src/main.c
Usermode/Libraries/libaxwin2.so_src/messages.c
Usermode/Libraries/libaxwin2.so_src/windows.c
Usermode/include/acess/sys.h
Usermode/include/axwin/axwin.h
Usermode/include/axwin/messages.h
Usermode/include/sys/sys.h
Usermode/include/sys/types.h

index b6f09c4..38055e5 100644 (file)
@@ -1 +1 @@
-BUILD_NUM = 2045
+BUILD_NUM = 2056
index b357dea..7c903ce 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Acess2 GUI Shell
+ * Acess2 GUI Test App
  * - By John Hodge (thePowersGang)
  */
 #include <axwin/axwin.h>
@@ -13,9 +13,11 @@ tAxWin_Handle        ghMenubarWindow;
 
 // === CODE ===
 int main(int argc, char *argv[])
-{      
+{
+       AxWin_Register("Terminal");
+       
        // Create Window
-       ghMenubarWindow = AxWin_CreateWindow(0, 0, -1, -1, WINFLAG_NOBORDER, Menubar_HandleMessage);
+       //ghMenubarWindow = AxWin_CreateWindow(0, 0, -1, -1, WINFLAG_NOBORDER, Menubar_HandleMessage);
        
        AxWin_MessageLoop();
        
index 7fa1000..6120612 100644 (file)
@@ -4,8 +4,9 @@
 
 CPPFLAGS += -I../include
 
-DIR = Apps/AxWin/1.0
-BIN = ../AxWinWM
-OBJ = main.o helpers.o commandline.o video.o messages.o
+DIR := Apps/AxWin/1.0
+BIN := ../AxWinWM
+OBJ := main.o helpers.o commandline.o video.o
+OBJ += messages.o interface.o
 
 -include ../../Makefile.tpl
index 13379fa..7ec792a 100644 (file)
@@ -24,5 +24,7 @@ extern int    giMouseFD;
 
 // === Functions ===
 extern void    memset32(void *ptr, uint32_t val, size_t count);
+extern void    Video_FillRect(short X, short Y, short W, short H, uint32_t Color);
+extern void    Video_Update(void);
 
 #endif
diff --git a/Usermode/Applications/axwin2_src/WM/interface.c b/Usermode/Applications/axwin2_src/WM/interface.c
new file mode 100644 (file)
index 0000000..36e0124
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Acess GUI (AxWin) Version 2
+ * By John Hodge (thePowersGang)
+ */
+#include "common.h"
+
+// === CODE ===
+void Interface_Render(void)
+{
+       Video_FillRect(
+               0, 0,
+               giScreenWidth/16, giScreenHeight,
+               0xDDDDDD);
+       
+       Video_Update();
+}
index 7d26b39..1a68acb 100644 (file)
@@ -7,7 +7,8 @@
 
 // === IMPORTS ===
 extern void    ParseCommandline(int argc, char *argv[]);
-extern void    Video_Setup();
+extern void    Video_Setup(void);
+extern void    Messages_PollIPC(void);
 
 // === GLOBALS ===
 char   *gsTerminalDevice = NULL;
@@ -34,6 +35,7 @@ int main(int argc, char *argv[])
        }
        
        Video_Setup();
+       Interface_Render();
        
        // Main Loop
        for(;;)
index 0147e5f..01bd07c 100644 (file)
@@ -62,7 +62,11 @@ void Messages_Handle(tAxWin_Message *Msg, tMessages_Handle_Callback *Respond, in
        {
        case MSG_SREQ_PING:
                Msg->ID = MSG_SRSP_PONG;
-               Respond(ID, sizeof(Msg->ID), Msg);
+               Msg->Size = 2;
+               Msg->SRsp_Pong.Major = 0;
+               Msg->SRsp_Pong.Minor = 1;
+               Msg->SRsp_Pong.Build = -1;
+               Messages_RespondIPC(ID, sizeof(Msg->ID), Msg);
                break;
        default:
                fprintf(stderr, "WARNING: Unknown message %i from %i (%p)\n", Msg->ID, ID, Respond);
index 00dbe16..fb08208 100644 (file)
@@ -7,13 +7,14 @@
 #include <acess/devices/terminal.h>
 
 // === PROTOTYPES ===
-void   Video_Setup();
-void   Video_Update();
+void   Video_Setup(void);
+void   Video_Update(void);
+void   Video_FillRect(short X, short Y, short W, short H, uint32_t Color);
 
 // === GLOBALS ===
 
 // === CODE ===
-void Video_Setup()
+void Video_Setup(void)
 {
         int    tmpInt;
        
@@ -58,8 +59,20 @@ void Video_Setup()
        Video_Update();
 }
 
-void Video_Update()
+void Video_Update(void)
 {
-       seek(giTerminalFD, 0, SEEK_SET);
+       //seek(giTerminalFD, 0, SEEK_SET);
+       seek(giTerminalFD, 0, 1);
        write(giTerminalFD, giScreenWidth*giScreenHeight*4, gpScreenBuffer);
 }
+
+void Video_FillRect(short X, short Y, short W, short H, uint32_t Color)
+{
+       uint32_t        *buf = gpScreenBuffer + Y*giScreenWidth + X;
+       
+       while( H -- )
+       {
+               memset32( buf, Color, W );
+               buf += giScreenWidth;
+       }
+}
index 5529140..2ce02e4 100644 (file)
@@ -7,7 +7,7 @@ CPPFLAGS +=
 CFLAGS   += -Wall
 LDFLAGS  += -lc -soname libaxwin2.so
 
-OBJ = main.o messages.o windows.o
+OBJ = main.o messages.o
 BIN = ../libaxwin2.so
 
 include ../Makefile.tpl
index 28d2839..f0a7ea1 100644 (file)
@@ -22,5 +22,6 @@ enum eAxWin_Modes
 
 // === Variables ===
 extern int     giAxWin_Mode;
+extern int     giAxWin_PID;
 
 #endif
index 1a12561..1dfcf9b 100644 (file)
@@ -7,12 +7,74 @@
  * main.c - Library Initialisation
  */
 #include "common.h"
+#include <string.h>
 
 // === GLOBALS ===
  int   giAxWin_Mode = 0;
+ int   giAxWin_PID = 0;
 
 // === CODE ===
 int SoMain()
 {
        return 0;
 }
+
+int AxWin_Register(const char *Name)
+{
+       tAxWin_Message  req;
+       tAxWin_Message  *msg;
+       tAxWin_RetMsg   *ret;
+        int    len = strlen(Name);
+       
+       req.ID = MSG_SREQ_REGISTER;
+       req.Size = 1 + (len+1)/4;
+       strcpy(req.Data, Name);
+       
+       AxWin_SendMessage(&req);
+       
+       for(;;)
+       {
+               msg = AxWin_WaitForMessage();
+               
+               if(msg->ID == MSG_SREQ_ADDTAB)
+               {
+                       ret = (void*) &msg->Data[0];
+                       if( ret->ReqID == MSG_SREQ_REGISTER )
+                               break;
+               }
+               
+               AxWin_HandleMessage(msg);
+               free(msg);
+       }
+       
+       return !!ret->Bool;
+}
+
+tAxWin_Handle AxWin_AddTab(const char *Title)
+{
+       tAxWin_Message  req;
+       tAxWin_Message  *msg;
+       tAxWin_RetMsg   *ret;
+        int    len = strlen(Title);
+       
+       req.ID = MSG_SREQ_ADDTAB;
+       req.Size = 1 + (len+1)/4;
+       strcpy(req.Data, Title);
+       
+       for(;;)
+       {
+               msg = AxWin_WaitForMessage();
+               
+               if(msg->ID == MSG_SRSP_RETURN)
+               {
+                       ret = (void*) &msg->Data[0];
+                       if( ret->ReqID == MSG_SREQ_ADDTAB )
+                               break;
+               }
+               
+               AxWin_HandleMessage(msg);
+               free(msg);
+       }
+       
+       return (tAxWin_Handle) ret->Handle;
+}
index d0fc5da..7b43bda 100644 (file)
 tAxWin_Message *AxWin_WaitForMessage();
  int   AxWin_HandleMessage(tAxWin_Message *Message);
 
+// ===  ===
+
 // === CODE ===
+int AxWin_SendMessage(tAxWin_Message *Message)
+{
+       switch(giAxWin_Mode)
+       {
+       case AXWIN_MODE_IPC:
+               SysSendMessage(giAxWin_PID, Message->Size*4, Message);
+               break;
+       default:
+               break;
+       }
+       return 0;
+}
+
 /**
  * \brief Loop forever, checking and waiting for messages
  */
index a37bfbb..efb418b 100644 (file)
@@ -13,11 +13,11 @@ struct sAxWin_Window
 {
        struct sAxWin_Window    *Next;
        uint32_t        WmHandle;
-       tAxWin_MessageCallback  Callback;
+       tAxWin_MessageCallback  *Callback;
 };
 
 // === PROTOTYPES ===
-tAxWin_Handle  AxWin_CreateWindow(
+tAxWin_Window  *AxWin_CreateWindow(
        int16_t X, int16_t Y, int16_t W, int16_t H,
        uint32_t Flags, tAxWin_MessageCallback *Callback
        );
@@ -27,7 +27,7 @@ tAxWin_Handle AxWin_CreateWindow(
 tAxWin_Window  *gProcessWindows;
 
 // === CODE ===
-tAxWin_Handle  AxWin_CreateWindow(
+tAxWin_Window  *AxWin_CreateWindow(
        int16_t X, int16_t Y,
        int16_t W, int16_t H,
        uint32_t Flags, tAxWin_MessageCallback *Callback)
index c3c216f..df15569 100644 (file)
@@ -1,10 +1,11 @@
 /*
  * Acess2 System Interface Header
  */
-#ifndef _SYS_SYS_H_
-#define _SYS_SYS_H_
+#ifndef _ACESS_SYS_H_
+#define _ACESS_SYS_H_
 
 #include <stdint.h>
+#include <sys/types.h>
 
 // === CONSTANTS ===
 #ifndef NULL
@@ -27,8 +28,6 @@
 #define FILEFLAG_SYMLINK       0x20
 
 // === TYPES ===
-typedef uint   pid_t;
-
 struct s_sysACL {
        union {
                struct {
@@ -73,6 +72,7 @@ extern int    clone(int flags, void *stack);
 extern int     execve(char *path, char **argv, char **envp);
 extern int     gettid();
 extern int     getpid();
+extern int     _SysSetFaultHandler(int (*Handler)(int));
 
 // --- Permissions ---
 extern int     getuid();
@@ -87,7 +87,7 @@ extern int    reopen(int fd, const char *path, int flags);
 extern void    close(int fd);
 extern uint    read(int fd, uint length, void *buffer);
 extern uint    write(int fd, uint length, void *buffer);
-extern int     seek(int fd, uint64_t offset, int whence);
+extern int     seek(int fd, int64_t offset, int whence);
 extern uint64_t        tell(int fd);
 extern int     ioctl(int fd, int id, void *data);
 extern int     finfo(int fd, t_sysFInfo *info, int maxacls);
index ee160b8..cacf1d8 100644 (file)
@@ -7,11 +7,14 @@
 #define _AXWIN_AXWIN_H
 
 // === Core Types ===
-typedef unsigned int   tAxWin_Handle;
+typedef void   *tAxWin_Handle;
 
 // === Messaging ===
 #include "messages.h"
 extern int     AxWin_MessageLoop();
+extern int     AxWin_SendMessage(tAxWin_Message *Message);
+extern tAxWin_Message  *AxWin_WaitForMessage(void);
+extern int     AxWin_HandleMessage(tAxWin_Message *Message);
 
 // === Window Control ===
 /**
@@ -30,7 +33,7 @@ typedef int   tAxWin_MessageCallback(tAxWin_Message *);
 /**
  * \}
  */
-extern tAxWin_Window   AxWin_CreateWindow(
+extern tAxWin_Window   *AxWin_CreateWindow(
                int16_t X, int16_t Y, int16_t W, int16_t H,
                uint32_t Flags, tAxWin_MessageCallback *Callback);
 
index b27583e..8a14223 100644 (file)
@@ -9,6 +9,13 @@
 #include <stdint.h>
 
 typedef struct sAxWin_Message  tAxWin_Message;
+typedef struct sAxWin_RetMsg   tAxWin_RetMsg;
+
+// Higherarchy:
+// - HANDLE
+//  + ELEMENT
+//   > DIALOG
+//   > TAB
 
 /**
  * \brief Message IDs
@@ -20,11 +27,11 @@ enum eAxWin_Messages
        // - Windows
        MSG_SREQ_REGISTER,      // bool (char[] Name) - Registers this PID with the Window Manager
        
-       MSG_SREQ_ADDTAB,        // ELEMENT (char[] Name) - Adds a tab to the window
+       MSG_SREQ_ADDTAB,        // TAB (char[] Name) - Adds a tab to the window
        MSG_SREQ_DELTAB,        // void (TAB Tab)       - Closes a tab
        
-       MSG_SREQ_NEWDIALOG,     // ELEMENT (ELEMENT Parent, char[] Name)        - Creates a dialog
-       MSG_SREQ_DELDIALOG,     // void (ELEMENT Dialog)        - Closes a dialog
+       MSG_SREQ_NEWDIALOG,     // DIALOG (TAB Parent, char[] Name)     - Creates a dialog
+       MSG_SREQ_DELDIALOG,     // void (DIALOG Dialog) - Closes a dialog
        
        MSG_SREQ_SETNAME,       // void (ELEMENT Element, char[] Name)
        MSG_SREQ_GETNAME,       // char[] (ELEMENT Element)
@@ -98,14 +105,18 @@ struct sAxWin_Message
 {
        uint16_t        ID;
        uint16_t        Size;   //!< Size in DWORDS
+       char    Data[];
+};
+
+struct sAxWin_RetMsg
+{
+       uint16_t        ReqID;
+       uint16_t        Rsvd;
        union
        {
-               struct sAxWin_SReq_Ping SReq_Pong;
-               struct sAxWin_SReq_NewWindow    SReq_NewWindow;
-               
-               // Server Responses
-               struct sAxWin_SRsp_Pong SRsp_Pong;
-               struct sAxWin_SRsp_NewWindow    SRsp_Window;
+                uint8_t        Bool;
+               uint32_t        Handle;
+                int    Integer;
        };
 };
 
index e7858dd..119bb6a 100644 (file)
@@ -1,6 +1,8 @@
 /*\r
  Syscall Definitions\r
 */\r
+#ifndef _SYS_SYS_H_\r
+#define _SYS_SYS_H_\r
 \r
 #include <sys/types.h>\r
 \r
@@ -25,7 +27,7 @@ extern int    close(int fp);
 extern int     read(int fp, int len, void *buf);\r
 extern int     write(int fp, int len, void *buf);\r
 extern int     tell(int fp);\r
-extern void seek(int fp, int dist, int flag);\r
+extern void seek(int fp, int64_t dist, int flag);\r
 extern int     fstat(int fp, t_fstat *st);\r
 extern int     ioctl(int fp, int call, void *arg);\r
 extern int     readdir(int fp, char *file);\r
@@ -37,4 +39,6 @@ extern int    sendmsg(int dest, unsigned int *Data);
 extern int     pollmsg(int *src, unsigned int *Data);\r
 extern int     getmsg(int *src, unsigned int *Data);\r
 \r
-extern int     _SysSetFaultHandler(int (*Handler)(int));\r
+#endif\r
+\r
+#endif\r
index 03ee846..2fad39f 100644 (file)
@@ -1,6 +1,8 @@
-
+/*
+ */
 #ifndef _SYS_TYPES_H
 #define _SYS_TYPES_H
+#include <stdint.h>
 
 typedef struct {
        int             st_dev;         //dev_t
@@ -25,4 +27,9 @@ typedef struct {
 #define                S_IFSOCK        0140000 /* socket */
 #define                S_IFIFO 0010000 /* fifo */
 
+
+typedef uint32_t       pid_t;
+typedef uint32_t       tid_t;
+typedef  int64_t       time_t;
+
 #endif

UCC git Repository :: git.ucc.asn.au