From: John Hodge Date: Tue, 6 Aug 2013 04:29:21 +0000 (+0800) Subject: Merge branch 'master' of git://localhost/acess2 X-Git-Tag: rel0.15~292 X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=45ff232a1db704623e0c4baed011d12cbd44b06e;hp=e7a76b0d8a0cc6aa77966509780973a6f8216ef7;p=tpg%2Facess2.git Merge branch 'master' of git://localhost/acess2 Conflicts: Usermode/Applications/irc_src/main.c --- diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..e3a5cbfa --- /dev/null +++ b/.gitmodules @@ -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 index 00000000..f61fb946 --- /dev/null +++ b/Externals/config.mk @@ -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 + diff --git a/Externals/core.mk b/Externals/core.mk index 4e39cf57..56d40506 100644 --- a/Externals/core.mk +++ b/Externals/core.mk @@ -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 index 00000000..940cf35d --- /dev/null +++ b/Externals/libspiderscript/Makefile @@ -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 index 00000000..9f2d7faf --- /dev/null +++ b/Externals/libspiderscript/source @@ -0,0 +1 @@ +Subproject commit 9f2d7faf34c16ceaee2f1bffe3d5558c41382523 diff --git a/KernelLand/Kernel/debug.c b/KernelLand/Kernel/debug.c index f0d21fa7..2444cb16 100644 --- a/KernelLand/Kernel/debug.c +++ b/KernelLand/Kernel/debug.c @@ -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(); } diff --git a/KernelLand/Kernel/drv/pty.c b/KernelLand/Kernel/drv/pty.c index 8b63b119..1d1bdf35 100644 --- a/KernelLand/Kernel/drv/pty.c +++ b/KernelLand/Kernel/drv/pty.c @@ -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) diff --git a/KernelLand/Kernel/drv/vterm.c b/KernelLand/Kernel/drv/vterm.c index cb7c3122..f37be220 100644 --- a/KernelLand/Kernel/drv/vterm.c +++ b/KernelLand/Kernel/drv/vterm.c @@ -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 ) diff --git a/KernelLand/Modules/Storage/ATA/io.c b/KernelLand/Modules/Storage/ATA/io.c index 9f471b7d..b15918e1 100644 --- a/KernelLand/Modules/Storage/ATA/io.c +++ b/KernelLand/Modules/Storage/ATA/io.c @@ -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); diff --git a/Makefile b/Makefile index 4ff95bd0..d3290dff 100644 --- 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 diff --git a/Usermode/Applications/axwin3_src/WM/ipc.c b/Usermode/Applications/axwin3_src/WM/ipc.c index 41949a80..7155c115 100644 --- a/Usermode/Applications/axwin3_src/WM/ipc.c +++ b/Usermode/Applications/axwin3_src/WM/ipc.c @@ -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); diff --git a/Usermode/Applications/axwin3_src/WM/renderers/framebuffer.c b/Usermode/Applications/axwin3_src/WM/renderers/framebuffer.c index 68a3f8cc..90f00332 100644 --- a/Usermode/Applications/axwin3_src/WM/renderers/framebuffer.c +++ b/Usermode/Applications/axwin3_src/WM/renderers/framebuffer.c @@ -41,6 +41,7 @@ tWMRenderer gRenderer_Framebuffer = { .IPCHandlers = { [IPC_FB_COMMIT] = _Handle_Commit, [IPC_FB_NEWBUF] = _Handle_CreateBuf, + //[IPC_FB_SUBBUF] = _Handle_SubBuf, } }; diff --git a/Usermode/Applications/axwin3_src/WM/wm.c b/Usermode/Applications/axwin3_src/WM/wm.c index 5f204af9..e2007000 100644 --- a/Usermode/Applications/axwin3_src/WM/wm.c +++ b/Usermode/Applications/axwin3_src/WM/wm.c @@ -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; } diff --git a/Usermode/Applications/irc_src/main.c b/Usermode/Applications/irc_src/main.c index 8336879a..09e11641 100644 --- a/Usermode/Applications/irc_src/main.c +++ b/Usermode/Applications/irc_src/main.c @@ -103,6 +103,16 @@ int main(int argc, const char *argv[], const char *envp[]) atexit(ExitHandler); +<<<<<<< HEAD + if( _SysIOCtl(1, DRV_IOCTL_TYPE, NULL) != DRV_TYPE_TERMINAL ) { + printf(stderr, "note: assuming 80x25, can't get terminal dimensions\n"); + giTerminal_Width = 80; + giTerminal_Height = 25; + } + else { + struct ptydims dims; + _SysIOCtl(1, PTY_IOCTL_GETDIMS, &dims); +======= { struct ptydims dims; if( _SysIOCtl(1, PTY_IOCTL_GETDIMS, &dims) ) { @@ -110,6 +120,7 @@ int main(int argc, const char *argv[], const char *envp[]) return 1; } +>>>>>>> e7a76b0d8a0cc6aa77966509780973a6f8216ef7 giTerminal_Width = dims.W; giTerminal_Height = dims.H; }