Merge into main the new state of the operating system/kernel #1
							
								
								
									
										16
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								Makefile
									
									
									
									
									
								
							@ -1,11 +1,10 @@
 | 
			
		||||
 | 
			
		||||
EMULATOR = qemu-system-i386
 | 
			
		||||
AS = ${HOME}/opt/cross/bin/i686-elf-as
 | 
			
		||||
CC = ${HOME}/opt/cross/bin/i686-elf-gcc
 | 
			
		||||
CPP = ${HOME}/opt/cross/bin/i686-elf-g++ 
 | 
			
		||||
CFLAGS =  -ffreestanding -Og -ggdb  -Wall -Wextra
 | 
			
		||||
CFLAGS =  -ffreestanding -Og -ggdb  -Wall -Wextra  -I source/CoreLib/build/include
 | 
			
		||||
 | 
			
		||||
OFILES =$(BUILD_DIR)/boot.o $(BUILD_DIR)/Path.o $(BUILD_DIR)/kterm.o $(BUILD_DIR)/kernel.o $(BUILD_DIR)/memory.o  $(BUILD_DIR)/paging.o	$(BUILD_DIR)/VFS.o $(BUILD_DIR)/pit.o 	$(BUILD_DIR)/time.o	$(BUILD_DIR)/keyboard.o	 $(BUILD_DIR)/io.o 	$(BUILD_DIR)/processor.o $(BUILD_DIR)/gdtc.o $(BUILD_DIR)/idt.o $(BUILD_DIR)/pic.o $(BUILD_DIR)/sv-terminal.o $(BUILD_DIR)/string.o  $(BUILD_DIR)/prekernel.o $(BUILD_DIR)/KHeap.o $(BUILD_DIR)/pci.o $(BUILD_DIR)/pcidevice.o $(BUILD_DIR)/atapiDevice.o $(BUILD_DIR)/ataDevice.o $(BUILD_DIR)/rsdp.o $(BUILD_DIR)/acpi.o
 | 
			
		||||
OFILES =$(BUILD_DIR)/boot.o $(BUILD_DIR)/kterm.o $(BUILD_DIR)/kernel.o $(BUILD_DIR)/memory.o  $(BUILD_DIR)/paging.o	$(BUILD_DIR)/VFS.o $(BUILD_DIR)/pit.o 	$(BUILD_DIR)/time.o	$(BUILD_DIR)/keyboard.o	 $(BUILD_DIR)/io.o 	$(BUILD_DIR)/processor.o $(BUILD_DIR)/gdtc.o $(BUILD_DIR)/idt.o $(BUILD_DIR)/pic.o $(BUILD_DIR)/sv-terminal.o $(BUILD_DIR)/prekernel.o $(BUILD_DIR)/KHeap.o $(BUILD_DIR)/pci.o $(BUILD_DIR)/pcidevice.o $(BUILD_DIR)/atapiDevice.o $(BUILD_DIR)/ataDevice.o $(BUILD_DIR)/rsdp.o $(BUILD_DIR)/acpi.o
 | 
			
		||||
 | 
			
		||||
SRC_DIR = source
 | 
			
		||||
BUILD_DIR = build
 | 
			
		||||
@ -53,8 +52,7 @@ test_disk: all
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
build_kernel: $(OBJ_LINK_LIST)
 | 
			
		||||
	$(CC) -T $(SRC_DIR)/kernel//linker.ld -o $(BUILD_DIR)/myos.bin \
 | 
			
		||||
	 -ffreestanding -ggdb -Og -nostdlib $(OBJ_LINK_LIST) -lgcc
 | 
			
		||||
	$(CPP) -T $(SRC_DIR)/kernel/linker.ld -o $(BUILD_DIR)/myos.bin -ffreestanding -ggdb -Og -nostdlib $(OBJ_LINK_LIST) -lgcc -L source/CoreLib/build -lCoreLib
 | 
			
		||||
 | 
			
		||||
build_x86_64: 
 | 
			
		||||
	$(AS) $(SRC_DIR)/cgc/x86_64/crti.s -o $(BUILD_DIR)/crti_64.o
 | 
			
		||||
@ -71,7 +69,7 @@ $(BUILD_DIR)/kterm.o:
 | 
			
		||||
	$(CPP) -c $(SRC_DIR)/kernel/terminal/kterm.cpp  -o $(BUILD_DIR)/kterm.o $(CFLAGS) -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
$(BUILD_DIR)/io.o:
 | 
			
		||||
		$(CPP) -c $(SRC_DIR)/kernel/drivers/io/io.cpp  -o $(BUILD_DIR)/io.o $(CFLAGS) -fno-exceptions -fno-rtti
 | 
			
		||||
	$(CPP) -c $(SRC_DIR)/kernel/drivers/io/io.cpp  -o $(BUILD_DIR)/io.o $(CFLAGS) -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
$(BUILD_DIR)/idt.o:
 | 
			
		||||
	$(CPP) -c $(SRC_DIR)/kernel/interrupts/idt.cpp -o $(BUILD_DIR)/idt.o $(CFLAGS) -fno-exceptions -fno-rtti
 | 
			
		||||
@ -82,9 +80,6 @@ $(BUILD_DIR)/gdtc.o:
 | 
			
		||||
$(BUILD_DIR)/pic.o:
 | 
			
		||||
	$(CPP) -c $(SRC_DIR)/kernel/drivers/pic/pic.cpp -o $(BUILD_DIR)/pic.o $(CFLAGS) -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
$(BUILD_DIR)/string.o:
 | 
			
		||||
	$(CC) -c $(SRC_DIR)/lib/include/string.c  -o $(BUILD_DIR)/string.o $(CFLAGS) -std=gnu99
 | 
			
		||||
 | 
			
		||||
$(BUILD_DIR)/PhysicalMemoryManager.o:
 | 
			
		||||
	$(CPP) -c $(SRC_DIR)/kernel/memory/PhysicalMemoryManager.cpp  -o $(BUILD_DIR)/PhysicalMemoryManager.o $(CFLAGS) -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
@ -136,9 +131,6 @@ $(BUILD_DIR)/prekernel.o:
 | 
			
		||||
$(BUILD_DIR)/processor.o:
 | 
			
		||||
	$(CPP) -c $(SRC_DIR)/kernel/i386/processor.cpp -o $(BUILD_DIR)/processor.o $(CFLAGS) -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
$(BUILD_DIR)/Path.o:
 | 
			
		||||
	$(CPP) -c $(SRC_DIR)/kernel/vfs/Path.cpp -o $(BUILD_DIR)/Path.o $(CFLAGS) -fno-exceptions -fno-rtti
 | 
			
		||||
 | 
			
		||||
# Assembly -> Object files
 | 
			
		||||
$(BUILD_DIR)/boot.o:
 | 
			
		||||
	$(AS) $(SRC_DIR)/kernel/boot/boot.s -o $(BUILD_DIR)/boot.o
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										33
									
								
								source/CoreLib/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								source/CoreLib/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
			
		||||
CPP = ${HOME}/opt/cross/bin/i686-elf-g++
 | 
			
		||||
CFLAGS = -ffreestanding -Og -ggdb -Wall -Wextra
 | 
			
		||||
 | 
			
		||||
SRC_DIR = .
 | 
			
		||||
BUILD_DIR = build
 | 
			
		||||
OBJ_FOLDER = bin
 | 
			
		||||
OUTPUTFILE = $(BUILD_DIR)/libCoreLib.a
 | 
			
		||||
 | 
			
		||||
OFILES = $(OBJ_FOLDER)/memory.o $(OBJ_FOLDER)/path.o $(OBJ_FOLDER)/stack.o $(OBJ_FOLDER)/string.o $(OBJ_FOLDER)/stringview.o
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.phony: all
 | 
			
		||||
all: $(OUTPUTFILE)
 | 
			
		||||
	cp *.h build/include/
 | 
			
		||||
 | 
			
		||||
$(OUTPUTFILE): $(OFILES)
 | 
			
		||||
	ar -rc $(OUTPUTFILE) $(OFILES)
 | 
			
		||||
 | 
			
		||||
$(OBJ_FOLDER)/memory.o: Memory.cpp
 | 
			
		||||
	$(CPP) -c Memory.cpp -o $(OBJ_FOLDER)/memory.o $(CFLAGS)
 | 
			
		||||
 | 
			
		||||
$(OBJ_FOLDER)/path.o: Path.cpp
 | 
			
		||||
	$(CPP) -c Path.cpp  -o $(OBJ_FOLDER)/path.o $(CFLAGS)
 | 
			
		||||
 | 
			
		||||
$(OBJ_FOLDER)/stack.o: Stack.cpp
 | 
			
		||||
	$(CPP) -c Stack.cpp  -o $(OBJ_FOLDER)/stack.o $(CFLAGS)
 | 
			
		||||
 | 
			
		||||
$(OBJ_FOLDER)/string.o: String.cpp
 | 
			
		||||
	$(CPP) -c String.cpp -o $(OBJ_FOLDER)/string.o $(CFLAGS)
 | 
			
		||||
 | 
			
		||||
$(OBJ_FOLDER)/stringview.o: StringView.cpp
 | 
			
		||||
	$(CPP) -c StringView.cpp  -o $(OBJ_FOLDER)/stringview.o $(CFLAGS)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										58
									
								
								source/CoreLib/Memory.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								source/CoreLib/Memory.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by nigel on 19/02/23.
 | 
			
		||||
//
 | 
			
		||||
#include "Memory.h"
 | 
			
		||||
 | 
			
		||||
void* memset (void* ptr, int value, size_t num)
 | 
			
		||||
{
 | 
			
		||||
    for( int i = 0; i < num; i++ )
 | 
			
		||||
    {
 | 
			
		||||
        unsigned char* data  = (unsigned char*)ptr+ i;
 | 
			
		||||
        *data = (unsigned char)value;
 | 
			
		||||
    }
 | 
			
		||||
    return ptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int memcmp( const void* ptr1, const void* ptr2, size_t num)
 | 
			
		||||
{
 | 
			
		||||
    const unsigned char * cs = (const unsigned char*) ptr1;
 | 
			
		||||
    const unsigned char * ct = (const unsigned char*) ptr2;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    for (int i = 0 ; i < num ; i++, cs++, ct++ ){
 | 
			
		||||
        if( *cs < *ct){
 | 
			
		||||
            return -1;
 | 
			
		||||
        } else if( *cs > *ct){
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
size_t strlen(const char* str) {
 | 
			
		||||
    size_t len = 0;
 | 
			
		||||
    while(str[len]){
 | 
			
		||||
        len++;
 | 
			
		||||
    }
 | 
			
		||||
    return len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int strncmp ( const char* str1, const char* str2, size_t num ){
 | 
			
		||||
    for( int i = 0; i < num ; i++){
 | 
			
		||||
 | 
			
		||||
        if( str1[i] < str2[i]){
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if( str1[i] > str2[i] ){
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								source/CoreLib/Memory.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								source/CoreLib/Memory.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
void* memset (void* ptr, int value, size_t num);
 | 
			
		||||
 | 
			
		||||
int memcmp( const void* ptr1, const void* ptr2, size_t num);
 | 
			
		||||
 | 
			
		||||
size_t strlen(const char* str);
 | 
			
		||||
 | 
			
		||||
int strncmp ( const char* str1, const char* str2, size_t num );
 | 
			
		||||
							
								
								
									
										24
									
								
								source/CoreLib/Path.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								source/CoreLib/Path.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by nigel on 19/02/23.
 | 
			
		||||
//
 | 
			
		||||
#include "Path.h"
 | 
			
		||||
 | 
			
		||||
Path::Path(String path)
 | 
			
		||||
: path(path)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
StringView Path::getbasename()
 | 
			
		||||
{
 | 
			
		||||
    unsigned int path_length = path.length();
 | 
			
		||||
    int i = path_length;
 | 
			
		||||
    while (path[i] != '/')
 | 
			
		||||
        i--;
 | 
			
		||||
 | 
			
		||||
    return {path,static_cast<unsigned int>(i +1), path_length};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char* Path::str() {
 | 
			
		||||
    return path.str();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								source/CoreLib/Path.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								source/CoreLib/Path.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by nigel on 19/02/23.
 | 
			
		||||
//
 | 
			
		||||
#pragma once
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#include "StringView.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Path{
 | 
			
		||||
public:
 | 
			
		||||
    explicit Path(String path);
 | 
			
		||||
 | 
			
		||||
    StringView getbasename();
 | 
			
		||||
 | 
			
		||||
    char* str();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    String path;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								source/CoreLib/Stack.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								source/CoreLib/Stack.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by nigel on 19/02/23.
 | 
			
		||||
//
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include "../../kernel/memory/KernelHeap.h"
 | 
			
		||||
#include "../kernel/memory/KernelHeap.h"
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
							
								
								
									
										39
									
								
								source/CoreLib/String.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								source/CoreLib/String.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
#include "String.h"
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
String::String(char* characters)
 | 
			
		||||
: chars(characters)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
char* String::str(){
 | 
			
		||||
    return chars;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned int String::length ()
 | 
			
		||||
{
 | 
			
		||||
    int i = 0;
 | 
			
		||||
 | 
			
		||||
    while (  chars[i] != '\0'){
 | 
			
		||||
        i++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns a null character if size exceeds limits
 | 
			
		||||
char String::operator[] (size_t idx)
 | 
			
		||||
{
 | 
			
		||||
    if( idx  > this->length())
 | 
			
		||||
        return '\0';
 | 
			
		||||
 | 
			
		||||
    return chars[idx];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char String::operator[](size_t idx) const {
 | 
			
		||||
return (const char) chars[idx];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								source/CoreLib/String.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								source/CoreLib/String.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
class  String {
 | 
			
		||||
public:
 | 
			
		||||
    String(char* characters);
 | 
			
		||||
    String(String&) = default;
 | 
			
		||||
    unsigned int length();
 | 
			
		||||
 | 
			
		||||
    char* str ();
 | 
			
		||||
    char operator[](size_t index) ;
 | 
			
		||||
    const char operator[](size_t idx) const;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    char* chars;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										14
									
								
								source/CoreLib/StringView.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								source/CoreLib/StringView.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by nigel on 19/02/23.
 | 
			
		||||
//
 | 
			
		||||
#include "StringView.h"
 | 
			
		||||
 | 
			
		||||
StringView::StringView(String string, unsigned int start, unsigned int end)
 | 
			
		||||
        : String(string), begin(start), end(end)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char* StringView::str(){
 | 
			
		||||
   //TODO: Not implemented
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								source/CoreLib/StringView.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								source/CoreLib/StringView.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by nigel on 19/02/23.
 | 
			
		||||
//
 | 
			
		||||
#pragma once
 | 
			
		||||
#include "String.h"
 | 
			
		||||
 | 
			
		||||
class StringView : String {
 | 
			
		||||
public:
 | 
			
		||||
    StringView(String string, unsigned int start, unsigned  int end );
 | 
			
		||||
    char* str ();
 | 
			
		||||
private:
 | 
			
		||||
    unsigned int begin;
 | 
			
		||||
    unsigned int end;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								source/CoreLib/bin/memory.o
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								source/CoreLib/bin/memory.o
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								source/CoreLib/bin/path.o
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								source/CoreLib/bin/path.o
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								source/CoreLib/bin/stack.o
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								source/CoreLib/bin/stack.o
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								source/CoreLib/bin/string.o
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								source/CoreLib/bin/string.o
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								source/CoreLib/bin/stringview.o
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								source/CoreLib/bin/stringview.o
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							@ -1,7 +1,8 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include "./../../terminal/kterm.h"
 | 
			
		||||
#include "../../../lib/include/mem.h"
 | 
			
		||||
#include <CoreLib/Memory.h>
 | 
			
		||||
 | 
			
		||||
struct RSDPTR {
 | 
			
		||||
    char signature[8];
 | 
			
		||||
    uint8_t Checksum ;
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,6 @@ void ATA_DEVICE::Soft_Reset(uint8_t DEVICE_CHANNEL,DEVICE_DRIVE drive){
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void ATA_DEVICE::Identify(uint16_t DEVICE_CHANNEL,DEVICE_DRIVE drive ){
 | 
			
		||||
    // lets ignore which port we actually want to check for now !
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
    Copyright © Nigel Barink 2023
 | 
			
		||||
*/
 | 
			
		||||
extern "C"{
 | 
			
		||||
#include "../lib/include/string.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#include "memory/memory.h"
 | 
			
		||||
#include "memory/KernelHeap.h"
 | 
			
		||||
#include "memory/gdt/gdtc.h"
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,9 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#include <CoreLib/Memory.h>
 | 
			
		||||
 | 
			
		||||
#include "../prekernel/bootstructure.h"
 | 
			
		||||
#include "../terminal/kterm.h"
 | 
			
		||||
#include "../../lib/include/mem.h"
 | 
			
		||||
#include "../bitmap.h"
 | 
			
		||||
 | 
			
		||||
#define BLOCK_SIZE 4092 
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include "gdt/gdtc.h"
 | 
			
		||||
#include "../../lib/include/string.h"
 | 
			
		||||
#include <CoreLib/Memory.h>
 | 
			
		||||
 | 
			
		||||
struct TaskStateSegment {
 | 
			
		||||
    uint32_t prev_tss;
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,8 @@
 | 
			
		||||
#include "memoryinfo.h"
 | 
			
		||||
#include "../prekernel/multiboot.h"
 | 
			
		||||
#include "../terminal/kterm.h"
 | 
			
		||||
#include "../../lib/include/mem.h"
 | 
			
		||||
#include <CoreLib/Memory.h>
 | 
			
		||||
 | 
			
		||||
#include "../bitmap.h"
 | 
			
		||||
 | 
			
		||||
#define BLOCK_SIZE 4092
 | 
			
		||||
 | 
			
		||||
@ -4,8 +4,6 @@
 | 
			
		||||
#include "../drivers/pit/pit.h"
 | 
			
		||||
#include "../drivers/ps-2/keyboard.h"
 | 
			
		||||
#include "../memory/PhysicalMemoryManager.h"
 | 
			
		||||
extern "C" {
 | 
			
		||||
    #include "../../lib/include/string.h"
 | 
			
		||||
}
 | 
			
		||||
#include <CoreLib/Memory.h>
 | 
			
		||||
 | 
			
		||||
extern "C" void startSuperVisorTerminal();
 | 
			
		||||
@ -5,10 +5,7 @@
 | 
			
		||||
 | 
			
		||||
#include "../drivers/vga/colors.h"
 | 
			
		||||
#include "../drivers/io/io.h"
 | 
			
		||||
extern "C" {
 | 
			
		||||
#include "../../lib/include/string.h"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#include "CoreLib/Memory.h"
 | 
			
		||||
 | 
			
		||||
void kterm_init();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,83 +0,0 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by nigel on 19/02/23.
 | 
			
		||||
//
 | 
			
		||||
#include "Path.h"
 | 
			
		||||
#include "../memory/KernelHeap.h"
 | 
			
		||||
String::String(char* characters)
 | 
			
		||||
: chars(characters)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char* String::str(){
 | 
			
		||||
    return chars;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsigned int String::length ()
 | 
			
		||||
{
 | 
			
		||||
    int i = 0;
 | 
			
		||||
 | 
			
		||||
    while (  chars[i] != '\0'){
 | 
			
		||||
        i++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns a null character if size exceeds limits
 | 
			
		||||
char String::operator[] (size_t idx)
 | 
			
		||||
{
 | 
			
		||||
    if( idx  > this->length())
 | 
			
		||||
        return '\0';
 | 
			
		||||
 | 
			
		||||
    return chars[idx];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char String::operator[](size_t idx) const {
 | 
			
		||||
    return (const char) chars[idx];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
StringView::StringView(String &string, unsigned int start, unsigned int end)
 | 
			
		||||
: String(string), begin(start), end(end)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char* StringView::str(){
 | 
			
		||||
    char* str = (char*) malloc((this->length() * sizeof(char))+1);
 | 
			
		||||
 | 
			
		||||
    int index = 0;
 | 
			
		||||
    for ( int i = begin; i < end ; i++){
 | 
			
		||||
        str[index] = chars[i];
 | 
			
		||||
        index++;
 | 
			
		||||
    }
 | 
			
		||||
    chars[index+1] ='\0';
 | 
			
		||||
    return str;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Path::Path(char *path)
 | 
			
		||||
: path(String(path))
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Path::Path(String &path)
 | 
			
		||||
: path(path)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
StringView Path::getbasename()
 | 
			
		||||
{
 | 
			
		||||
    unsigned int path_length = path.length();
 | 
			
		||||
    int i = path_length;
 | 
			
		||||
    while (path[i] != '/')
 | 
			
		||||
        i--;
 | 
			
		||||
 | 
			
		||||
    return StringView(path,i +1, path_length);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char* Path::str() {
 | 
			
		||||
    return path.str();
 | 
			
		||||
}
 | 
			
		||||
@ -1,46 +0,0 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by nigel on 19/02/23.
 | 
			
		||||
//
 | 
			
		||||
#pragma once
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
class  String {
 | 
			
		||||
public:
 | 
			
		||||
    String(char* characters);
 | 
			
		||||
    String(String&) = default;
 | 
			
		||||
    unsigned int length();
 | 
			
		||||
 | 
			
		||||
    char* str ();
 | 
			
		||||
    char operator[](size_t index) ;
 | 
			
		||||
    const char operator[](size_t idx) const;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    char* chars;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class StringView : String {
 | 
			
		||||
public:
 | 
			
		||||
    StringView(String& string, unsigned int start, unsigned  int end );
 | 
			
		||||
    char* str ();
 | 
			
		||||
private:
 | 
			
		||||
    unsigned int begin;
 | 
			
		||||
    unsigned int end;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class Path{
 | 
			
		||||
public:
 | 
			
		||||
    Path(String& path);
 | 
			
		||||
    Path(char* path);
 | 
			
		||||
 | 
			
		||||
    StringView getbasename();
 | 
			
		||||
 | 
			
		||||
    char* str();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    String path;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
#include "../drivers/ata/ataDevice.h"
 | 
			
		||||
#include "../partitiontable/mbr/MasterBootRecord.h"
 | 
			
		||||
#include "../memory/KernelHeap.h"
 | 
			
		||||
#include "Path.h"
 | 
			
		||||
#include "../../CoreLib/Memory.h"
 | 
			
		||||
#include "../filesystem/FAT/DirectoryEntry.h"
 | 
			
		||||
 | 
			
		||||
MOUNT_INFO mountInfo;
 | 
			
		||||
@ -389,6 +389,8 @@ char* FindNextEntryName (char* path )
 | 
			
		||||
 | 
			
		||||
void FileSystem::ResolvePath(Path &path)
 | 
			
		||||
{
 | 
			
		||||
    // See reference material (1) https://man7.org/linux/man-pages/man7/path_resolution.7.html
 | 
			
		||||
 | 
			
		||||
    char* string_path  = path.str();
 | 
			
		||||
    void* cpy = string_path;
 | 
			
		||||
 | 
			
		||||
@ -410,9 +412,6 @@ void FileSystem::ResolvePath(Path &path)
 | 
			
		||||
    skip = strlen(entry_name);
 | 
			
		||||
    free(entry_name);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    free(cpy);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include "Path.h"
 | 
			
		||||
#include "../../CoreLib/Path.h"
 | 
			
		||||
 | 
			
		||||
#define FS_FILE 0
 | 
			
		||||
#define FS_DIRECTORY 1
 | 
			
		||||
 | 
			
		||||
@ -1,31 +0,0 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
// NOTE: These should not be inline 
 | 
			
		||||
inline void* memset (void* ptr, int value, size_t num)
 | 
			
		||||
{
 | 
			
		||||
    for( int i = 0; i < num; i++ )
 | 
			
		||||
    {
 | 
			
		||||
        unsigned char* data  = (unsigned char*)ptr+ i;
 | 
			
		||||
        *data = (unsigned char)value;
 | 
			
		||||
    }
 | 
			
		||||
    return ptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
inline int memcmp( const void* ptr1, const void* ptr2, size_t num)
 | 
			
		||||
{
 | 
			
		||||
    const unsigned char * cs = (const unsigned char*) ptr1;
 | 
			
		||||
    const unsigned char * ct = (const unsigned char*) ptr2;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    for (int i = 0 ; i < num ; i++, cs++, ct++ ){
 | 
			
		||||
       if( *cs < *ct){
 | 
			
		||||
           return -1;
 | 
			
		||||
       } else if( *cs > *ct){
 | 
			
		||||
           return 1;
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -1,26 +0,0 @@
 | 
			
		||||
#include "string.h"
 | 
			
		||||
 | 
			
		||||
size_t strlen(const char* str) {
 | 
			
		||||
    size_t len = 0;
 | 
			
		||||
    while(str[len]){
 | 
			
		||||
        len++;
 | 
			
		||||
    }
 | 
			
		||||
    return len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int strncmp ( const char* str1, const char* str2, size_t num ){
 | 
			
		||||
    for( int i = 0; i < num ; i++){
 | 
			
		||||
        
 | 
			
		||||
        if( str1[i] < str2[i]){
 | 
			
		||||
            return -1;
 | 
			
		||||
        } 
 | 
			
		||||
 | 
			
		||||
        if( str1[i] > str2[i] ){
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@ -1,4 +0,0 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
size_t strlen(const char* str);
 | 
			
		||||
int strncmp ( const char* str1, const char* str2, size_t num );
 | 
			
		||||
		Reference in New Issue
	
	Block a user