Merge branch 'master' of git://localhost/acess2
authorJohn Hodge <[email protected]>
Tue, 6 Aug 2013 04:29:21 +0000 (12:29 +0800)
committerJohn Hodge <[email protected]>
Tue, 6 Aug 2013 04:29:21 +0000 (12:29 +0800)
Conflicts:
Usermode/Applications/irc_src/main.c

14 files changed:
.gitmodules [new file with mode: 0644]
Externals/config.mk [new file with mode: 0644]
Externals/core.mk
Externals/libspiderscript/Makefile [new file with mode: 0644]
Externals/libspiderscript/source [new submodule]
KernelLand/Kernel/debug.c
KernelLand/Kernel/drv/pty.c
KernelLand/Kernel/drv/vterm.c
KernelLand/Modules/Storage/ATA/io.c
Makefile
Usermode/Applications/axwin3_src/WM/ipc.c
Usermode/Applications/axwin3_src/WM/renderers/framebuffer.c
Usermode/Applications/axwin3_src/WM/wm.c
Usermode/Applications/irc_src/main.c

diff --git a/.gitmodules b/.gitmodules
new file mode 100644 (file)
index 0000000..e3a5cbf
--- /dev/null
@@ -0,0 +1,3 @@
+[submodule "Externals/libspiderscript/source"]
+       path = Externals/libspiderscript/source
+       url = git://git.mutabah.net/spiderscript.git
diff --git a/Externals/config.mk b/Externals/config.mk
new file mode 100644 (file)
index 0000000..f61fb94
--- /dev/null
@@ -0,0 +1,20 @@
+#
+#
+#
+-include ../../Makefile.cfg
+
+ifeq ($(ARCH),x86)
+ BFD := i586
+else ifeq ($(ARCH),x86_64)
+ BFD := x86_64
+else
+ $(error No BFD translation for $(ARCH) in Externals/core.mk)
+endif
+
+#PREFIX=$(ACESSDIR)/Externals/Output
+#EPREFIX=$(ACESSDIR)/Externals/Output/$(BFD)
+PREFIX=$(ACESSDIR)/Externals/Output/$(ARCH)
+EPREFIX=$(PREFIX)
+SYSROOT=$(ACESSDIR)/Externals/Output/sysroot-$(BFD)
+HOST=$(BFD)-acess_proxy-elf
+
index 4e39cf5..56d4050 100644 (file)
@@ -5,22 +5,7 @@
 # core.mk
 # - Makefile code used by all externals
 
--include ../../Makefile.cfg
-
-ifeq ($(ARCH),x86)
- BFD := i586
-else ifeq ($(ARCH),x86_64)
- BFD := x86_64
-else
- $(error No BFD translation for $(ARCH) in Externals/core.mk)
-endif
-
-#PREFIX=$(ACESSDIR)/Externals/Output
-#EPREFIX=$(ACESSDIR)/Externals/Output/$(BFD)
-PREFIX=$(ACESSDIR)/Externals/Output/$(ARCH)
-EPREFIX=$(PREFIX)
-SYSROOT=$(ACESSDIR)/Externals/Output/sysroot-$(BFD)
-HOST=$(BFD)-acess_proxy-elf
+include $(dir $(lastword $(MAKEFILE_LIST)))/config.mk
 
 #
 # DEPS : Dependencies for this program/library 
diff --git a/Externals/libspiderscript/Makefile b/Externals/libspiderscript/Makefile
new file mode 100644 (file)
index 0000000..940cf35
--- /dev/null
@@ -0,0 +1,21 @@
+
+ARCHIVE=unused
+-include ../config.mk
+
+CC = $(HOST)-gcc
+
+all: source/libspiderscript.so
+       
+clean:
+       CC=$(CC) make -C source/src clean
+
+source/:
+       git submodule update source/
+source/libspiderscript.so: source/
+       CC=$(CC) make -C source/src
+
+install: source/libspiderscript.so
+       cp source/libspiderscript.so $(EPREFIX)/lib
+       cp source/spiderscript.h $(PREFIX)/include
+
+
diff --git a/Externals/libspiderscript/source b/Externals/libspiderscript/source
new file mode 160000 (submodule)
index 0000000..9f2d7fa
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 9f2d7faf34c16ceaee2f1bffe3d5558c41382523
index f0d21fa..2444cb1 100644 (file)
@@ -113,9 +113,13 @@ void Debug_FmtS(int bUseKTerm, const char *format, ...)
 
 void Debug_KernelPanic(void)
 {
-       #if LOCK_DEBUG_OUTPUT
-       SHORTREL(&glDebug_Lock);
-       #endif
+       if( !gbDebug_IsKPanic )
+       {
+               #if LOCK_DEBUG_OUTPUT
+               SHORTREL(&glDebug_Lock);
+               #endif
+               VT_SetTerminal(7);
+       }
        gbDebug_IsKPanic ++;
        KernelPanic_SetMode();
 }
index 8b63b11..1d1bdf3 100644 (file)
@@ -532,6 +532,8 @@ _select:
        Mutex_Acquire(&pty->InputMutex);
        Length = _rb_read(pty->InputData, INPUT_RINGBUFFER_LEN, &pty->InputReadPos, &pty->InputWritePos,
                Buffer, Length);
+       if( Length && pty->ServerNode )
+               VFS_MarkFull(pty->ServerNode, 0);
        Mutex_Release(&pty->InputMutex);
 
        if(pty->InputReadPos == pty->InputWritePos)
@@ -559,19 +561,29 @@ size_t PTY_WriteClient(tVFS_Node *Node, off_t Offset, size_t Length, const void
        }       
 
        // Write to either FIFO or directly to output function
-       if( pty->OutputFcn )
-       {
+       if( pty->OutputFcn ) {
                pty->OutputFcn(pty->OutputHandle, Length, Buffer);
+               return Length;
        }
-       else
-       {
-               // Write to output ringbuffer
-               Length = _rb_write(pty->OutputData, OUTPUT_RINGBUFFER_LEN,
-                       &pty->OutputReadPos, &pty->OutputWritePos,
-                       Buffer, Length);
-               VFS_MarkAvaliable(pty->ServerNode, 1);
+       
+       // FIFO
+       tTime   timeout_z, *timeout = (Flags & VFS_IOFLAG_NOBLOCK) ? &timeout_z : NULL;
+        int    rv;
+       
+       rv = VFS_SelectNode(Node, VFS_SELECT_WRITE, timeout, "PTY_WriteClient");
+       if(!rv ) {
+               errno = (timeout ? EWOULDBLOCK : EINTR);
+               return -1;
        }
        
+       // Write to output ringbuffer
+       Length = _rb_write(pty->OutputData, OUTPUT_RINGBUFFER_LEN,
+               &pty->OutputReadPos, &pty->OutputWritePos,
+               Buffer, Length);
+       VFS_MarkAvaliable(pty->ServerNode, 1);
+       if( (pty->OutputWritePos + 1) % OUTPUT_RINGBUFFER_LEN == pty->OutputReadPos )
+               VFS_MarkFull(Node, 1);
+       
        return Length;
 }
 
@@ -605,6 +617,10 @@ void PTY_CloseClient(tVFS_Node *Node)
 size_t PTY_ReadServer(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer, Uint Flags)
 {
        tPTY *pty = Node->ImplPtr;
+       if( !pty ) {
+               errno = EIO;
+               return -1;
+       }
 
        // TODO: Prevent two servers fighting over client's output      
        if( pty->OutputFcn )
@@ -634,7 +650,26 @@ size_t PTY_ReadServer(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer
 //\! Write to the client's input
 size_t PTY_WriteServer(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags)
 {
-       return PTY_SendInput(Node->ImplPtr, Buffer, Length);
+       tPTY    *pty = Node->ImplPtr;
+       if( !pty ) {
+               errno = EIO;
+               return -1;
+       }
+
+       tTime   timeout_z = 0, *timeout = (Flags & VFS_IOFLAG_NOBLOCK) ? &timeout_z : NULL;
+       int rv = VFS_SelectNode(Node, VFS_SELECT_WRITE, timeout, "PTY_WriteServer");
+       if(!rv) {
+               errno = (timeout ? EWOULDBLOCK : EINTR);
+               return -1;
+       }
+       size_t  used = 0;
+       do {
+               used += PTY_SendInput(Node->ImplPtr, Buffer, Length);
+       } while( used < Length && !(Flags & VFS_IOFLAG_NOBLOCK) );
+       
+       if( (pty->InputWritePos+1)%INPUT_RINGBUFFER_LEN == pty->InputReadPos )
+               VFS_MarkFull(Node, 1);
+       return used;
 }
 
 void PTY_CloseServer(tVFS_Node *Node)
index cb7c312..f37be22 100644 (file)
@@ -98,7 +98,7 @@ int VT_Install(char **Arguments)
                                data[ val - arg ] = '\0';
                                val ++;
                        }
-                       Log_Debug("VTerm", "Argument '%s'", arg);
+                       Log_Debug("VTerm", "Argument '%s'='%s'", opt, val);
                        
                        if( strcmp(opt, "Video") == 0 ) {
                                if( !gsVT_OutputDevice )
index 9f471b7..b15918e 100644 (file)
@@ -249,15 +249,22 @@ Uint64 ATA_GetDiskSize(int Disk)
        }
 
        // Poll until BSY clears or ERR is set
+       tTime   endtime = now() + 2*1000;       // 2 second timeout
        // TODO: Timeout?
-       while( (val & 0x80) && !(val & 1) )
+       while( (val & 0x80) && !(val & 1) && now() < endtime )
                val = inb(base+7);
        LOG("BSY unset (0x%x)", val);
        // and, wait for DRQ to set
-       while( !(val & 0x08) && !(val & 1))
+       while( !(val & 0x08) && !(val & 1) && now() < endtime )
                val = inb(base+7);
        LOG("DRQ set (0x%x)", val);
 
+       if(now() >= endtime) {
+               Log_Warning("ATA", "Timeout on ATA IDENTIFY (Disk %i)", Disk);
+               LEAVE('i', 0);
+               return 0;
+       }
+
        // Check for an error
        if(val & 1) {
                LEAVE('i', 0);
index 4ff95bd..d3290df 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -14,48 +14,55 @@ USRLIBS := crt0.o acess.ld ld-acess.so libc.so libposix.so
 USRLIBS += libreadline.so libnet.so liburi.so libpsocket.so
 USRLIBS += libimage_sif.so libunicode.so
 
+EXTLIBS := libspiderscript
+# zlib libpng
+
 USRAPPS := init login CLIShell cat ls mount automounter
 USRAPPS += bomb lspci
 USRAPPS += ip dhcpclient ping telnet irc wget telnetd
 USRAPPS += axwin3 gui_ate gui_shell
 
-ALL_DYNMODS = $(addprefix all-,$(DYNMODS))
-ALL_MODULES := $(addprefix all-,$(MODULES))
-ALL_USRLIBS := $(addprefix all-,$(USRLIBS))
-ALL_USRAPPS := $(addprefix all-,$(USRAPPS))
-CLEAN_DYNMODS := $(addprefix clean-,$(DYNMODS))
-CLEAN_MODULES := $(addprefix clean-,$(MODULES))
-CLEAN_USRLIBS := $(addprefix clean-,$(USRLIBS))
-CLEAN_USRAPPS := $(addprefix clean-,$(USRAPPS))
-INSTALL_DYNMODS := $(addprefix install-,$(DYNMODS))
-INSTALL_MODULES := $(addprefix install-,$(MODULES))
-INSTALL_USRLIBS := $(addprefix install-,$(USRLIBS))
-INSTALL_USRAPPS := $(addprefix install-,$(USRAPPS))
-AI_DYNMODS := $(addprefix allinstall-,$(DYNMODS))
-AI_MODULES := $(addprefix allinstall-,$(MODULES))
-AI_USRLIBS := $(addprefix allinstall-,$(USRLIBS))
-AI_USRAPPS := $(addprefix allinstall-,$(USRAPPS))
+define targetclasses
+ AI_$1      := $$(addprefix allinstall-,$$($1))
+ ALL_$1     := $$(addprefix all-,$$($1))
+ CLEAN_$1   := $$(addprefix clean-,$$($1))
+ INSTALL_$1 := $$(addprefix install-,$$($1))
+endef
+
+$(eval $(call targetclasses,DYNMODS))
+$(eval $(call targetclasses,MODULES))
+$(eval $(call targetclasses,USRLIBS))
+$(eval $(call targetclasses,EXTLIBS))
+$(eval $(call targetclasses,USRAPPS))
+
+targetvars := $$(AI_$1) $$(ALL_$1) $$(CLEAN_$1) $$(INSTALL_$1)
 
 .PHONY: all clean install \
-       kmode all-kmode clean-kmode \
-       all-user clean-user \
-       utest mtest \
-       $(ALL_MODULES) all-Kernel $(ALL_USRLIBS) $(ALL_USRAPPS) \
-       $(AI_MODULES) allinstall-Kernel $(AI_USRLIBS) $(AI_USRAPPS) \
-       $(CLEAN_MODULES) clean-Kernel $(CLEAN_USRLIBS) $(CLEAN_USRAPPS) \
-       $(INSTALL_MODULES) install-Kernel $(INSTALL_USRLIBS) $(INSTALL_USRAPPS)
-
-kmode: $(AI_MODULES) $(AI_DYNMODS) allinstall-Kernel
-all-kmode:     $(ALL_MODULES) $(ALL_DYNMODS) all-Kernel
+       ai-kmode all-kmode clean-kmode install-kmode \
+       ai-user all-user clean-user install-user \
+       utest mtest
+
+.PHONY: allinstall-Kernel all-Kernel clean-Kernel install-Kernel \
+       $(call targetvars,DYNMODS) \
+       $(call targetvars,MODULES) \
+       $(call targetvars,USRLIBS) \
+       $(call targetvars,EXTLIBS) \
+       $(call targetvars,USRAPPS)
+
+ai-kmode:      $(AI_MODULES) allinstall-Kernel $(AI_DYNMODS)
+all-kmode:     $(ALL_MODULES) all-Kernel $(ALL_DYNMODS)
 clean-kmode:   $(CLEAN_MODULES) $(CLEAN_DYNMODS) clean-Kernel
+install-kmode: $(INSTALL_MODULES) install-Kernel $(INSTALL_DYNMODS)
 
-all-user: $(ALL_USRLIBS) $(ALL_USRAPPS)
-clean-user: $(CLEAN_USRLIBS) $(CLEAN_USRAPPS)
+ai-user:       $(AI_USRLIBS) $(AI_EXTLIBS) $(AI_USRAPPS)
+all-user:      $(ALL_USRLIBS) $(ALL_EXTLIBS) $(ALL_USRAPPS)
+clean-user:    $(CLEAN_USRLIBS) $(CLEAN_EXTLIBS) $(CLEAN_USRAPPS)
+install-user:  $(INSTALL_USRLIBS) $(INSTALL_EXTLIBS) $(INSTALL_USRAPPS)
 
-all:   SyscallList $(ALL_USRLIBS) $(ALL_USRAPPS) $(ALL_MODULES) all-Kernel $(ALL_DYNMODS)
-all-install:   install-Filesystem SyscallList $(AI_USRLIBS) $(AI_USRAPPS) $(AI_MODULES) allinstall-Kernel $(AI_DYNMODS)
-clean: $(CLEAN_DYNMODS) $(CLEAN_MODULES) clean-Kernel $(CLEAN_USRLIBS) $(CLEAN_USRAPPS)
-install:       install-Filesystem SyscallList $(INSTALL_USRLIBS) $(INSTALL_USRAPPS) $(INSTALL_DYNMODS) $(INSTALL_MODULES) install-Kernel
+all:   SyscallList all-user all-kmode
+all-install:   install-Filesystem SyscallList ai-user ai-kmode
+clean: clean-kmode clean-user
+install:       install-Filesystem SyscallList install-user install-kmode
 
 utest: $(USRLIBS:%=utest-%)
 
@@ -75,57 +82,29 @@ _build_dynmod := BUILDTYPE=dynamic $(SUBMAKE) -C KernelLand/Modules/
 _build_stmod  := BUILDTYPE=static $(SUBMAKE) -C KernelLand/Modules/
 _build_kernel := $(SUBMAKE) -C KernelLand/Kernel
 
-# Compile Only
-$(ALL_DYNMODS): all-%:
-       +@echo === Dynamic Module: $* && $(_build_dynmod)$* all
-$(ALL_MODULES): all-%:
-       +@echo === Module: $* && $(_build_stmod)$* all
+define rules
+$$(ALL_$1): all-%:
+       +@echo === $2 && $3 all
+$$(AI_$1): allinstall-%:
+       +@echo === $2 && $3 all install
+$$(CLEAN_$1): clean-%:
+       +@echo === $2 && $3 clean
+$$(INSTALL_$1): install-%:
+       +@$3 install
+endef
+
+$(eval $(call rules,DYNMODS,Dynamic Module: $$*,$(_build_dynmod)$$*))
+$(eval $(call rules,MODULES,Module: $$*,$(_build_stmod)$$*))
+$(eval $(call rules,USRLIBS,User Library: $$*,$(SUBMAKE) -C Usermode/Libraries/$$*_src))
+$(eval $(call rules,EXTLIBS,External Library: $$*,$(SUBMAKE) -C Externals/$$*))
+$(eval $(call rules,USRAPPS,User Application: $$*,$(SUBMAKE) -C Usermode/Applications/$$*_src))
 all-Kernel:
        +@echo === Kernel && $(_build_kernel) all
-$(ALL_USRLIBS): all-%:
-       +@echo === User Library: $* && $(SUBMAKE) all -C Usermode/Libraries/$*_src
-$(ALL_USRAPPS): all-%:
-       +@echo === User Application: $* && $(SUBMAKE) all -C Usermode/Applications/$*_src
-
-# Compile & Install
-$(AI_DYNMODS): allinstall-%:
-       +@echo === Dynamic Module: $* && $(_build_dynmod)$* all install
-$(AI_MODULES): allinstall-%:
-       +@echo === Module: $* && $(_build_stmod)$* all install
 allinstall-Kernel:
        +@echo === Kernel && $(_build_kernel) all install
-$(AI_USRLIBS): allinstall-%:
-       +@echo === User Library: $* && $(SUBMAKE) all install -C Usermode/Libraries/$*_src
-$(AI_USRAPPS): allinstall-%:
-       +@echo === User Application: $* && $(SUBMAKE) all install -C Usermode/Applications/$*_src
-
-# Clean up compilation
-$(CLEAN_DYNMODS): clean-%:
-       +@$(_build_dynmod)$* clean
-$(CLEAN_MODULES): clean-%:
-       +@$(_build_stmod)$* clean
 clean-Kernel:
        +@$(_build_kernel) clean
-$(CLEAN_USRLIBS): clean-%:
-       +@$(SUBMAKE) clean -C Usermode/Libraries/$*_src
-$(CLEAN_USRAPPS): clean-%:
-       +@$(SUBMAKE) clean -C Usermode/Applications/$*_src
-
-# Install
-ifeq ($(ARCH),host)
-install-%:
-       
-else
-$(INSTALL_DYNMODS): install-%:
-       @$(_build_dynmod)$* install
-$(INSTALL_MODULES): install-%:
-       @$(_build_stmod)$* install
-install-Filesystem:
-       @$(SUBMAKE) install -C Usermode/Filesystem
 install-Kernel:
        @$(_build_kernel) install
-$(INSTALL_USRLIBS): install-%:
-       @$(SUBMAKE) install -C Usermode/Libraries/$*_src
-$(INSTALL_USRAPPS): install-%:
-       @$(SUBMAKE) install -C Usermode/Applications/$*_src
-endif
+install-Filesystem:
+       @$(SUBMAKE) install -C Usermode/Filesystem
index 41949a8..7155c11 100644 (file)
@@ -492,7 +492,7 @@ void IPC_Handle(tIPC_Client *Client, size_t MsgLen, tAxWin_IPCMessage *Msg)
                        _SysDebug("WARNING: Message %i has no handler in %s", Msg->ID, renderer->Name);
                        return ;
                }
-               _SysDebug("IPC_Handle: Call %s-%i", renderer->Name, Msg->ID);
+               _SysDebug("IPC_Handle: Call %s-%i %ib", renderer->Name, Msg->ID, Msg->Size);
                rv = renderer->IPCHandlers[Msg->ID](win, Msg->Size, Msg->Data);
                if( rv )
                        _SysDebug("IPC_Handle: rv != 0 (%i)", rv);
@@ -511,7 +511,7 @@ void IPC_Handle(tIPC_Client *Client, size_t MsgLen, tAxWin_IPCMessage *Msg)
                        return ;
                }
        
-               _SysDebug("IPC_Handle: Call WM-%i", Msg->ID);
+               _SysDebug("IPC_Handle: Call WM-%i %ib", Msg->ID, Msg->Size);
                rv = gIPC_MessageHandlers[Msg->ID](Client, Msg);
                if( rv )
                        _SysDebug("IPC_Handle: rv != 0 (%i)", rv);
index 68a3f8c..90f0033 100644 (file)
@@ -41,6 +41,7 @@ tWMRenderer   gRenderer_Framebuffer = {
        .IPCHandlers = {
                [IPC_FB_COMMIT] = _Handle_Commit,
                [IPC_FB_NEWBUF] = _Handle_CreateBuf,
+               //[IPC_FB_SUBBUF] = _Handle_SubBuf,
        }
 };
 
index 5f204af..e200700 100644 (file)
@@ -60,7 +60,16 @@ void WM_Initialise(void)
 
 void WM_RegisterRenderer(tWMRenderer *Renderer)
 {
-       // TODO: Catch out duplicates
+       // Catch out duplicates
+       for(tWMRenderer *r = gpWM_Renderers; r; r = r->Next ) {
+               if( r == Renderer ) {
+                       return ;
+               }
+               if( strcmp(r->Name, Renderer->Name) == 0 ) {
+                       return ;
+               }
+       }
+       
        Renderer->Next = gpWM_Renderers;
        gpWM_Renderers = Renderer;
 }
index 8336879..09e1164 100644 (file)
@@ -103,6 +103,16 @@ int main(int argc, const char *argv[], const char *envp[])
        \r
        atexit(ExitHandler);\r
        \r
+<<<<<<< HEAD
+       if( _SysIOCtl(1, DRV_IOCTL_TYPE, NULL) != DRV_TYPE_TERMINAL ) {\r
+               printf(stderr, "note: assuming 80x25, can't get terminal dimensions\n");\r
+               giTerminal_Width = 80;\r
+               giTerminal_Height = 25;\r
+       }\r
+       else {\r
+               struct ptydims  dims;\r
+               _SysIOCtl(1, PTY_IOCTL_GETDIMS, &dims);\r
+=======
        {\r
                struct ptydims  dims;\r
                if( _SysIOCtl(1, PTY_IOCTL_GETDIMS, &dims) ) {\r
@@ -110,6 +120,7 @@ int main(int argc, const char *argv[], const char *envp[])
                        return 1;\r
                }\r
                \r
+>>>>>>> e7a76b0d8a0cc6aa77966509780973a6f8216ef7
                giTerminal_Width = dims.W;\r
                giTerminal_Height = dims.H;\r
        }\r

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