Merge branch 'master' of git.mutabah.net:acess2
authorJohn Hodge <[email protected]>
Tue, 24 Apr 2012 07:06:23 +0000 (15:06 +0800)
committerJohn Hodge <[email protected]>
Tue, 24 Apr 2012 07:06:23 +0000 (15:06 +0800)
KernelLand/Kernel/arch/x86/vm8086.c
KernelLand/Kernel/include/acess.h
KernelLand/Kernel/threads.c
KernelLand/Modules/Filesystems/InitRD/.gitignore [new file with mode: 0644]
Usermode/Applications/axwin3_src/WM/renderers/widget/textinput.c

index f4e98c4..44c60df 100644 (file)
@@ -357,6 +357,15 @@ void VM8086_GPF(tRegs *Regs)
                }
                break;
        
+       case 0x0F:
+               opcode = *(Uint8*)( (Regs->cs*16) + (Regs->eip&0xFFFF));
+               Log_Error("VM8086", "Error - Unknown opcode 0F %02x caused a GPF at %04x:%04x",
+                       opcode, Regs->cs, Regs->eip);
+               // Force an end to the call
+               Regs->cs = VM8086_MAGIC_CS;
+               Regs->eip = VM8086_MAGIC_IP;
+               break;
+
        default:
                Log_Error("VM8086", "Error - Unknown opcode %02x caused a GPF at %04x:%04x",
                        opcode, Regs->cs, Regs->eip-1);
index 5b9effb..c8cff88 100644 (file)
@@ -504,6 +504,7 @@ extern void Threads_Exit(int TID, int Status);
 extern void    Threads_Yield(void);
 extern void    Threads_Sleep(void);
 extern int     Threads_WakeTID(tTID Thread);
+extern tPGID   Threads_GetPGID(void);
 extern tPID    Threads_GetPID(void);
 extern tTID    Threads_GetTID(void);
 extern tUID    Threads_GetUID(void);
index 6367172..e22994b 100644 (file)
@@ -1,5 +1,6 @@
 /*
- * Acess2
+ * Acess2 Kernel
+ * - By John Hodge (thePowersGang)
  * threads.c
  * - Common Thread Control
  */
@@ -125,14 +126,6 @@ void Threads_Init(void)
        Log_Debug("Threads", ".KernelStack = %i", offsetof(tThread, KernelStack));
        
        // Create Initial Task
-//     #if SCHEDULER_TYPE == SCHED_RR_PRI
-//     gaActiveThreads[gThreadZero.Priority].Head = &gThreadZero;
-//     gaActiveThreads[gThreadZero.Priority].Tail = &gThreadZero;
-//     #else
-//     gActiveThreads.Head = &gThreadZero;
-//     gActiveThreads.Tail = &gThreadZero;
-//     #endif
-       
        gAllThreads = &gThreadZero;
        giNumActiveThreads = 1;
        gThreadZero.Process = &gProcessZero;
@@ -149,6 +142,25 @@ void Threads_Delete(tThread *Thread)
        Proc_ClearThread(Thread);                       
 
        Thread->Process->nThreads --;
+
+       if( Thread->Process->FirstThread == Thread )
+       {
+               Thread->Process->FirstThread = Thread->ProcessNext;
+       }
+       else
+       {
+               tThread *prev = Thread->Process->FirstThread;
+               while(prev && prev->ProcessNext != Thread)
+                       prev = prev->ProcessNext;
+               if( !prev )
+                       Log_Error("Threads", "Thread %p(%i %s) is not on the process's list",
+                               Thread, Thread->TID, Thread->ThreadName
+                               );
+               else
+                       prev->ProcessNext = Thread->ProcessNext;
+       }
+
+       // If the final thread is being terminated, clean up the process
        if( Thread->Process->nThreads == 0 )
        {
                tProcess        *proc = Thread->Process;
@@ -906,42 +918,8 @@ void Threads_AddActive(tThread *Thread)
  */
 tThread *Threads_RemActive(void)
 {
-       #if 0
-       tThread *ret = Proc_GetCurThread();
-
-       if( !IS_LOCKED(&glThreadListLock) ) {
-               Log_KernelPanic("Threads", "Threads_RemActive called without lock held");
-               return NULL;
-       }
-       
-       // Delete from active queue
-       #if SCHEDULER_TYPE == SCHED_RR_PRI
-       if( !Threads_int_DelFromQueue(&gaActiveThreads[ret->Priority], ret) )
-       #else
-       if( !Threads_int_DelFromQueue(&gActiveThreads, ret) )
-       #endif
-       {
-               Log_Warning("Threads", "Current thread %p(%i %s) is not on active queue",
-                       ret, ret->TID, ret->ThreadName
-                       );
-               return NULL;
-       }
-       
-       ret->Next = NULL;
-       ret->Remaining = 0;
-       
-       // no need to decrement tickets, scheduler did it for us
-       
-       #if SCHEDULER_TYPE == SCHED_LOTTERY && DEBUG_TRACE_TICKETS
-       Log("CPU%i %p (%i %s) removed, giFreeTickets = %i [nc]",
-               GetCPUNum(), ret, ret->TID, ret->ThreadName, giFreeTickets);
-       #endif
-       
-       return ret;
-       #else
        giNumActiveThreads --;
        return Proc_GetCurThread();
-       #endif
 }
 
 /**
diff --git a/KernelLand/Modules/Filesystems/InitRD/.gitignore b/KernelLand/Modules/Filesystems/InitRD/.gitignore
new file mode 100644 (file)
index 0000000..85e33a6
--- /dev/null
@@ -0,0 +1 @@
+files.*.c*
index 9a0ae64..6d34a8e 100644 (file)
@@ -140,13 +140,25 @@ int Widget_TextInput_KeyFire(tElement *Element, int KeySym, int Character)
                        {
                                len = ReadUTF8Rev(Element->Text, info->CursorByteOfs, &cp);
                                info->CursorByteOfs -= len;
+                               WM_Render_GetTextDims(
+                                       gpTextInput_Font,
+                                       Element->Text+info->CursorByteOfs,
+                                       len, &w, 0
+                                       );
+                               info->CursorXOfs -= w;
                        }
                        break;
                case KEYSYM_RIGHTARROW:
                        if( info->CursorByteOfs < info->Length )
                        {
                                len = ReadUTF8(Element->Text + info->CursorByteOfs, &cp);
+                               WM_Render_GetTextDims(
+                                       gpTextInput_Font,
+                                       Element->Text+info->CursorByteOfs,
+                                       len, &w, 0
+                                       );
                                info->CursorByteOfs += len;
+                               info->CursorXOfs += w;
                        }
                        break;
                }

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