mirror of
https://github.com/reactos/reactos.git
synced 2024-06-29 01:12:06 +00:00
Re-organized things a slight bit.
Split up stdlib.c and renamed it to rtl. Separated disk functions from file system functions. svn path=/trunk/; revision=2403
This commit is contained in:
parent
d4d6b6dbf7
commit
12e0be217f
|
@ -25,17 +25,17 @@ export RM = cmd /C del
|
||||||
export CP = cmd /C copy
|
export CP = cmd /C copy
|
||||||
|
|
||||||
#FLAGS = -Wall -nostdinc -fno-builtin
|
#FLAGS = -Wall -nostdinc -fno-builtin
|
||||||
FLAGS = -Wall -fno-builtin -DDEBUG -O3
|
FLAGS = -Wall -fno-builtin -I./ -DDEBUG -O3
|
||||||
#FLAGS = -Wall -fno-builtin
|
#FLAGS = -Wall -fno-builtin
|
||||||
|
|
||||||
# asmcode.o has to be first in the link line because it contains the startup code
|
# asmcode.o has to be first in the link line because it contains the startup code
|
||||||
#OBJS = asmcode.a asmcode.o mb.o boot.o freeldr.o stdlib.o fs.a fs.o fat.o \
|
#OBJS = asmcode.a asmcode.o mb.o boot.o freeldr.o rtl.o fs.a fs.o fat.o \
|
||||||
# reactos.o tui.o menu.o miscboot.o options.o linux.o multiboot.o arcname.o \
|
# reactos.o tui.o menu.o miscboot.o options.o linux.o multiboot.o arcname.o \
|
||||||
# mem.o memory.o debug.o parseini.o registry.o import.o
|
# mem.o memory.o debug.o parseini.o registry.o import.o
|
||||||
ASM_OBJS = asmcode.o mb.o boot.o mem.o
|
ASM_OBJS = asmcode.o mb.o boot.o mem.o
|
||||||
C_OBJS = freeldr.o stdlib.o fs.a tui.o menu.o miscboot.o options.o linux.o multiboot.o \
|
C_OBJS = freeldr.o rtl/rtl.a fs/fs.a ui/ui.a miscboot.o options.o linux.o multiboot.o \
|
||||||
reactos/reactos.o reactos/registry.o reactos/reghive.o reactos/hwdetect.o
|
reactos/reactos.a comm/comm.a disk/disk.a mm/mm.a
|
||||||
C_OBJS2 = arcname.o memory.o debug.o parseini.o rs232.o portio.o oslist.o
|
C_OBJS2 = debug.o parseini.o oslist.o
|
||||||
|
|
||||||
.PHONY : clean
|
.PHONY : clean
|
||||||
|
|
||||||
|
@ -63,56 +63,50 @@ c_code2.a: $(C_OBJS2)
|
||||||
asmcode.o: asmcode.S asmcode.h Makefile
|
asmcode.o: asmcode.S asmcode.h Makefile
|
||||||
$(CC) $(FLAGS) -o asmcode.o -c asmcode.S
|
$(CC) $(FLAGS) -o asmcode.o -c asmcode.S
|
||||||
|
|
||||||
freeldr.o: freeldr.c freeldr.h stdlib.h fs.h reactos/reactos.h tui.h asmcode.h menu.h miscboot.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o freeldr.o -c freeldr.c
|
|
||||||
|
|
||||||
stdlib.o: stdlib.c freeldr.h stdlib.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o stdlib.o -c stdlib.c
|
|
||||||
|
|
||||||
fs.a: fs.o fat.o Makefile
|
|
||||||
$(LD) -r -o fs.a fs.o fat.o
|
|
||||||
|
|
||||||
fs.o: fs.c freeldr.h fs.h stdlib.h tui.h asmcode.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o fs.o -c fs.c
|
|
||||||
|
|
||||||
fat.o: fat.c fat.h freeldr.h fs.h stdlib.h tui.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o fat.o -c fat.c
|
|
||||||
|
|
||||||
reactos/reactos.o: reactos/reactos.c freeldr.h reactos/reactos.h reactos/registry.h reactos/hwdetect.h stdlib.h fs.h tui.h multiboot.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o reactos/reactos.o -c reactos/reactos.c
|
|
||||||
|
|
||||||
multiboot.o: multiboot.c freeldr.h stdlib.h fs.h multiboot.h tui.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o multiboot.o -c multiboot.c
|
|
||||||
|
|
||||||
mb.o: mb.S asmcode.h multiboot.h Makefile
|
mb.o: mb.S asmcode.h multiboot.h Makefile
|
||||||
$(CC) $(FLAGS) -o mb.o -c mb.S
|
$(CC) $(FLAGS) -o mb.o -c mb.S
|
||||||
|
|
||||||
tui.o: tui.c freeldr.h stdlib.h tui.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o tui.o -c tui.c
|
|
||||||
|
|
||||||
menu.o: menu.c freeldr.h stdlib.h tui.h menu.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o menu.o -c menu.c
|
|
||||||
|
|
||||||
boot.o: boot.S asmcode.h Makefile
|
boot.o: boot.S asmcode.h Makefile
|
||||||
$(CC) $(FLAGS) -o boot.o -c boot.S
|
$(CC) $(FLAGS) -o boot.o -c boot.S
|
||||||
|
|
||||||
miscboot.o: miscboot.c freeldr.h asmcode.h stdlib.h fs.h tui.h miscboot.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o miscboot.o -c miscboot.c
|
|
||||||
|
|
||||||
options.o: options.c freeldr.h stdlib.h tui.h options.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o options.o -c options.c
|
|
||||||
|
|
||||||
linux.o: linux.c freeldr.h stdlib.h tui.h linux.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o linux.o -c linux.c
|
|
||||||
|
|
||||||
arcname.o: arcname.c freeldr.h arcname.h stdlib.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o arcname.o -c arcname.c
|
|
||||||
|
|
||||||
mem.o: mem.S asmcode.h Makefile
|
mem.o: mem.S asmcode.h Makefile
|
||||||
$(CC) $(FLAGS) -o mem.o -c mem.S
|
$(CC) $(FLAGS) -o mem.o -c mem.S
|
||||||
|
|
||||||
memory.o: memory.c memory.h Makefile
|
freeldr.o: freeldr.c freeldr.h rtl.h fs.h reactos.h ui.h asmcode.h miscboot.h Makefile
|
||||||
$(CC) $(FLAGS) -o memory.o -c memory.c
|
$(CC) $(FLAGS) -o freeldr.o -c freeldr.c
|
||||||
|
|
||||||
|
rtl/rtl.a: rtl/print.o rtl/stdlib.o rtl/string.o rtl/memory.o Makefile
|
||||||
|
$(MAKE) -C rtl
|
||||||
|
|
||||||
|
fs/fs.a: fs/fs.o fs/fat.o Makefile
|
||||||
|
$(MAKE) -C fs
|
||||||
|
|
||||||
|
ui/ui.a: ui/tui.o ui/menu.o Makefile
|
||||||
|
$(MAKE) -C ui
|
||||||
|
|
||||||
|
miscboot.o: miscboot.c freeldr.h asmcode.h rtl.h fs.h ui.h miscboot.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o miscboot.o -c miscboot.c
|
||||||
|
|
||||||
|
options.o: options.c freeldr.h rtl.h ui.h options.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o options.o -c options.c
|
||||||
|
|
||||||
|
linux.o: linux.c freeldr.h rtl.h ui.h linux.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o linux.o -c linux.c
|
||||||
|
|
||||||
|
multiboot.o: multiboot.c freeldr.h rtl.h fs.h multiboot.h ui.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o multiboot.o -c multiboot.c
|
||||||
|
|
||||||
|
reactos/reactos.a: reactos/arcname.o reactos/reactos.o reactos/reghive.o reactos/registry.o reactos/hwdetect.o Makefile
|
||||||
|
$(MAKE) -C reactos
|
||||||
|
|
||||||
|
comm/comm.a: comm/rs232.o comm/portio.o Makefile
|
||||||
|
$(MAKE) -C comm
|
||||||
|
|
||||||
|
disk/disk.a: disk/disk.o Makefile
|
||||||
|
$(MAKE) -C disk
|
||||||
|
|
||||||
|
mm/mm.a: mm/mm.o Makefile
|
||||||
|
$(MAKE) -C mm
|
||||||
|
|
||||||
debug.o: debug.c debug.h Makefile
|
debug.o: debug.c debug.h Makefile
|
||||||
$(CC) $(FLAGS) -o debug.o -c debug.c
|
$(CC) $(FLAGS) -o debug.o -c debug.c
|
||||||
|
@ -120,25 +114,17 @@ debug.o: debug.c debug.h Makefile
|
||||||
parseini.o: parseini.c parseini.h Makefile
|
parseini.o: parseini.c parseini.h Makefile
|
||||||
$(CC) $(FLAGS) -o parseini.o -c parseini.c
|
$(CC) $(FLAGS) -o parseini.o -c parseini.c
|
||||||
|
|
||||||
rs232.o: rs232.c rs232.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o rs232.o -c rs232.c
|
|
||||||
|
|
||||||
portio.o: portio.c portio.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o portio.o -c portio.c
|
|
||||||
|
|
||||||
oslist.o: oslist.c oslist.h Makefile
|
oslist.o: oslist.c oslist.h Makefile
|
||||||
$(CC) $(FLAGS) -o oslist.o -c oslist.c
|
$(CC) $(FLAGS) -o oslist.o -c oslist.c
|
||||||
|
|
||||||
reactos/registry.o: reactos/registry.c freeldr.h memory.h reactos/registry.h stdlib.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o reactos/registry.o -c reactos/registry.c
|
|
||||||
|
|
||||||
reactos/reghive.o: reactos/reghive.c freeldr.h reactos/registry.h stdlib.h memory.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o reactos/reghive.o -c reactos/reghive.c
|
|
||||||
|
|
||||||
reactos/hwdetect.o: reactos/hwdetect.c freeldr.h reactos/hwdetect.h Makefile
|
|
||||||
$(CC) $(FLAGS) -o reactos/hwdetect.o -c reactos/hwdetect.c
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) *.o
|
$(RM) *.o
|
||||||
$(RM) *.a
|
$(RM) *.a
|
||||||
$(RM) *.sys
|
$(RM) *.sys
|
||||||
|
$(MAKE) -C reactos clean
|
||||||
|
$(MAKE) -C comm clean
|
||||||
|
$(MAKE) -C disk clean
|
||||||
|
$(MAKE) -C mm clean
|
||||||
|
$(MAKE) -C ui clean
|
||||||
|
$(MAKE) -C fs clean
|
||||||
|
$(MAKE) -C rtl clean
|
||||||
|
|
144
freeldr/freeldr/cache/Makefile
vendored
Normal file
144
freeldr/freeldr/cache/Makefile
vendored
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
#
|
||||||
|
# FreeLoader
|
||||||
|
# Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
export CC = gcc
|
||||||
|
export LD = ld
|
||||||
|
export AR = ar
|
||||||
|
export RM = cmd /C del
|
||||||
|
export CP = cmd /C copy
|
||||||
|
|
||||||
|
#FLAGS = -Wall -nostdinc -fno-builtin
|
||||||
|
FLAGS = -Wall -fno-builtin -DDEBUG -O3
|
||||||
|
#FLAGS = -Wall -fno-builtin
|
||||||
|
|
||||||
|
# asmcode.o has to be first in the link line because it contains the startup code
|
||||||
|
#OBJS = asmcode.a asmcode.o mb.o boot.o freeldr.o stdlib.o fs.a fs.o fat.o \
|
||||||
|
# reactos.o tui.o menu.o miscboot.o options.o linux.o multiboot.o arcname.o \
|
||||||
|
# mem.o memory.o debug.o parseini.o registry.o import.o
|
||||||
|
ASM_OBJS = asmcode.o mb.o boot.o mem.o
|
||||||
|
C_OBJS = freeldr.o stdlib.o fs.a tui.o menu.o miscboot.o options.o linux.o multiboot.o \
|
||||||
|
reactos/reactos.o reactos/registry.o reactos/reghive.o reactos/hwdetect.o
|
||||||
|
C_OBJS2 = arcname.o memory.o debug.o parseini.o rs232.o portio.o oslist.o
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
all: freeldr.sys
|
||||||
|
|
||||||
|
freeldr.sys: asmcode.a c_code.a
|
||||||
|
$(LD) -N -Ttext=0x8000 --oformat=binary -s -o f.sys asmcode.a c_code.a
|
||||||
|
../bootsect/stubit ../bootsect/fatstub.bin f.sys freeldr.sys
|
||||||
|
|
||||||
|
freeldr.exe: asmcode.a c_code.a
|
||||||
|
$(LD) -o freeldr.exe asmcode.a c_code.a
|
||||||
|
|
||||||
|
asmcode.a: $(ASM_OBJS)
|
||||||
|
$(LD) -r -o asmcode.a $(ASM_OBJS)
|
||||||
|
|
||||||
|
c_code.a: c_code1.a c_code2.a
|
||||||
|
$(LD) -r -o c_code.a c_code1.a c_code2.a
|
||||||
|
|
||||||
|
c_code1.a: $(C_OBJS)
|
||||||
|
$(LD) -r -o c_code1.a $(C_OBJS)
|
||||||
|
|
||||||
|
c_code2.a: $(C_OBJS2)
|
||||||
|
$(LD) -r -o c_code2.a $(C_OBJS2)
|
||||||
|
|
||||||
|
asmcode.o: asmcode.S asmcode.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o asmcode.o -c asmcode.S
|
||||||
|
|
||||||
|
freeldr.o: freeldr.c freeldr.h stdlib.h fs.h reactos/reactos.h tui.h asmcode.h menu.h miscboot.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o freeldr.o -c freeldr.c
|
||||||
|
|
||||||
|
stdlib.o: stdlib.c freeldr.h stdlib.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o stdlib.o -c stdlib.c
|
||||||
|
|
||||||
|
fs.a: fs.o fat.o Makefile
|
||||||
|
$(LD) -r -o fs.a fs.o fat.o
|
||||||
|
|
||||||
|
fs.o: fs.c freeldr.h fs.h stdlib.h tui.h asmcode.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o fs.o -c fs.c
|
||||||
|
|
||||||
|
fat.o: fat.c fat.h freeldr.h fs.h stdlib.h tui.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o fat.o -c fat.c
|
||||||
|
|
||||||
|
reactos/reactos.o: reactos/reactos.c freeldr.h reactos/reactos.h reactos/registry.h reactos/hwdetect.h stdlib.h fs.h tui.h multiboot.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o reactos/reactos.o -c reactos/reactos.c
|
||||||
|
|
||||||
|
multiboot.o: multiboot.c freeldr.h stdlib.h fs.h multiboot.h tui.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o multiboot.o -c multiboot.c
|
||||||
|
|
||||||
|
mb.o: mb.S asmcode.h multiboot.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o mb.o -c mb.S
|
||||||
|
|
||||||
|
tui.o: tui.c freeldr.h stdlib.h tui.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o tui.o -c tui.c
|
||||||
|
|
||||||
|
menu.o: menu.c freeldr.h stdlib.h tui.h menu.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o menu.o -c menu.c
|
||||||
|
|
||||||
|
boot.o: boot.S asmcode.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o boot.o -c boot.S
|
||||||
|
|
||||||
|
miscboot.o: miscboot.c freeldr.h asmcode.h stdlib.h fs.h tui.h miscboot.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o miscboot.o -c miscboot.c
|
||||||
|
|
||||||
|
options.o: options.c freeldr.h stdlib.h tui.h options.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o options.o -c options.c
|
||||||
|
|
||||||
|
linux.o: linux.c freeldr.h stdlib.h tui.h linux.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o linux.o -c linux.c
|
||||||
|
|
||||||
|
arcname.o: arcname.c freeldr.h arcname.h stdlib.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o arcname.o -c arcname.c
|
||||||
|
|
||||||
|
mem.o: mem.S asmcode.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o mem.o -c mem.S
|
||||||
|
|
||||||
|
memory.o: memory.c memory.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o memory.o -c memory.c
|
||||||
|
|
||||||
|
debug.o: debug.c debug.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o debug.o -c debug.c
|
||||||
|
|
||||||
|
parseini.o: parseini.c parseini.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o parseini.o -c parseini.c
|
||||||
|
|
||||||
|
rs232.o: rs232.c rs232.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o rs232.o -c rs232.c
|
||||||
|
|
||||||
|
portio.o: portio.c portio.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o portio.o -c portio.c
|
||||||
|
|
||||||
|
oslist.o: oslist.c oslist.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o oslist.o -c oslist.c
|
||||||
|
|
||||||
|
reactos/registry.o: reactos/registry.c freeldr.h memory.h reactos/registry.h stdlib.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o reactos/registry.o -c reactos/registry.c
|
||||||
|
|
||||||
|
reactos/reghive.o: reactos/reghive.c freeldr.h reactos/registry.h stdlib.h memory.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o reactos/reghive.o -c reactos/reghive.c
|
||||||
|
|
||||||
|
reactos/hwdetect.o: reactos/hwdetect.c freeldr.h reactos/hwdetect.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o reactos/hwdetect.o -c reactos/hwdetect.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o
|
||||||
|
$(RM) *.a
|
||||||
|
$(RM) *.sys
|
|
@ -1,6 +1,8 @@
|
||||||
/*
|
/*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
* Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
|
* Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
* Copyright (C) 2001 Eric Kohl
|
||||||
|
* Copyright (C) 2001 Emanuele Aliberti
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -17,8 +19,14 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __PORTIO_H
|
#ifndef __RS232_H
|
||||||
#define __PORTIO_H
|
#define __RS232_H
|
||||||
|
|
||||||
|
BOOL Rs232PortInitialize(ULONG ComPort, ULONG BaudRate);
|
||||||
|
BOOL Rs232PortGetByte(PUCHAR ByteRecieved);
|
||||||
|
BOOL Rs232PortPollByte(PUCHAR ByteRecieved);
|
||||||
|
VOID Rs232PortPutByte(UCHAR ByteToSend);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -74,4 +82,4 @@ VOID
|
||||||
WRITE_PORT_USHORT (PUSHORT Port, USHORT Value);
|
WRITE_PORT_USHORT (PUSHORT Port, USHORT Value);
|
||||||
|
|
||||||
|
|
||||||
#endif // defined __PORTIO_H
|
#endif // defined __RS232_H
|
46
freeldr/freeldr/comm/Makefile
Normal file
46
freeldr/freeldr/comm/Makefile
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#
|
||||||
|
# FreeLoader
|
||||||
|
# Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
export CC = gcc
|
||||||
|
export LD = ld
|
||||||
|
export AR = ar
|
||||||
|
export RM = cmd /C del
|
||||||
|
export CP = cmd /C copy
|
||||||
|
|
||||||
|
FLAGS = -Wall -fno-builtin -I../ -DDEBUG -O3
|
||||||
|
|
||||||
|
OBJS = rs232.o portio.o
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
all: comm.a
|
||||||
|
|
||||||
|
comm.a: $(OBJS)
|
||||||
|
$(LD) -r -o comm.a $(OBJS)
|
||||||
|
|
||||||
|
rs232.o: rs232.c ../comm.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o rs232.o -c rs232.c
|
||||||
|
|
||||||
|
portio.o: portio.c ../comm.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o portio.o -c portio.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o
|
||||||
|
$(RM) *.a
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: portio.c,v 1.1 2001/08/07 06:19:43 bpalmer Exp $
|
/* $Id: portio.c,v 1.1 2001/11/28 10:26:52 bpalmer Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
|
@ -19,8 +19,8 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "portio.h"
|
#include <comm.h>
|
||||||
|
|
||||||
|
|
||||||
/* MACROS *******************************************************************/
|
/* MACROS *******************************************************************/
|
||||||
|
@ -120,7 +120,7 @@ static BOOL Rs232DoesComPortExist(PUCHAR BaseAddress)
|
||||||
BOOL Rs232PortInitialize(ULONG ComPort, ULONG BaudRate)
|
BOOL Rs232PortInitialize(ULONG ComPort, ULONG BaudRate)
|
||||||
{
|
{
|
||||||
ULONG BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8};
|
ULONG BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8};
|
||||||
char buffer[80];
|
//char buffer[80];
|
||||||
ULONG divisor;
|
ULONG divisor;
|
||||||
BYTE lcr;
|
BYTE lcr;
|
||||||
|
|
|
@ -17,16 +17,14 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "debug.h"
|
#include <debug.h>
|
||||||
#include "stdlib.h"
|
#include <rtl.h>
|
||||||
#include "rs232.h"
|
#include <comm.h>
|
||||||
#include "parseini.h"
|
|
||||||
#include "portio.h"
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
ULONG DebugPrintMask = DPRINT_WARNING | DPRINT_MEMORY | DPRINT_FILESYSTEM | DPRINT_UI;
|
ULONG DebugPrintMask = DPRINT_WARNING | DPRINT_MEMORY | DPRINT_FILESYSTEM | DPRINT_UI | DPRINT_DISK;
|
||||||
|
|
||||||
#define SCREEN 0
|
#define SCREEN 0
|
||||||
#define RS232 1
|
#define RS232 1
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#define DPRINT_FILESYSTEM 0x00000004 // OR this with DebugPrintMask to enable file system messages
|
#define DPRINT_FILESYSTEM 0x00000004 // OR this with DebugPrintMask to enable file system messages
|
||||||
#define DPRINT_INIFILE 0x00000008 // OR this with DebugPrintMask to enable .ini file messages
|
#define DPRINT_INIFILE 0x00000008 // OR this with DebugPrintMask to enable .ini file messages
|
||||||
#define DPRINT_UI 0x00000010 // OR this with DebugPrintMask to enable user interface messages
|
#define DPRINT_UI 0x00000010 // OR this with DebugPrintMask to enable user interface messages
|
||||||
|
#define DPRINT_DISK 0x00000020 // OR this with DebugPrintMask to enable disk messages
|
||||||
|
|
||||||
VOID DebugInit(VOID);
|
VOID DebugInit(VOID);
|
||||||
VOID DebugPrint(ULONG Mask, char *format, ...);
|
VOID DebugPrint(ULONG Mask, char *format, ...);
|
||||||
|
|
59
freeldr/freeldr/disk.h
Normal file
59
freeldr/freeldr/disk.h
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
/*
|
||||||
|
* FreeLoader
|
||||||
|
* Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __DISK_H
|
||||||
|
#define __DISK_H
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _GEOMETRY
|
||||||
|
{
|
||||||
|
ULONG Cylinders;
|
||||||
|
ULONG Heads;
|
||||||
|
ULONG Sectors;
|
||||||
|
ULONG BytesPerSector;
|
||||||
|
|
||||||
|
} GEOMETRY, *PGEOMETRY;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// BIOS Disk Functions
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
int biosdisk(int cmd, int drive, int head, int track, int sector, int nsects, void *buffer); // Implemented in asmcode.S
|
||||||
|
|
||||||
|
BOOL BiosInt13Read(ULONG Drive, ULONG Head, ULONG Track, ULONG Sector, ULONG SectorCount, PVOID Buffer); // Implemented in asmcode.S
|
||||||
|
BOOL BiosInt13ReadExtended(ULONG Drive, ULONG Sector, ULONG SectorCount, PVOID Buffer); // Implemented in asmcode.S
|
||||||
|
BOOL BiosInt13ExtensionsSupported(ULONG Drive);
|
||||||
|
|
||||||
|
void stop_floppy(void); // Implemented in asmcode.S
|
||||||
|
int get_heads(int drive); // Implemented in asmcode.S
|
||||||
|
int get_cylinders(int drive); // Implemented in asmcode.S
|
||||||
|
int get_sectors(int drive); // Implemented in asmcode.S
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// FreeLoader Disk Functions
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
VOID DiskSetDriveGeometry(ULONG Cylinders, ULONG Heads, ULONG Sectors, ULONG BytesPerSector);
|
||||||
|
VOID DiskSetVolumeProperties(ULONG HiddenSectors);
|
||||||
|
BOOL DiskReadMultipleLogicalSectors(ULONG SectorNumber, ULONG SectorCount, PVOID Buffer);
|
||||||
|
BOOL DiskReadLogicalSector(ULONG SectorNumber, PVOID Buffer);
|
||||||
|
|
||||||
|
#endif // defined __DISK_H
|
43
freeldr/freeldr/disk/Makefile
Normal file
43
freeldr/freeldr/disk/Makefile
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#
|
||||||
|
# FreeLoader
|
||||||
|
# Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
export CC = gcc
|
||||||
|
export LD = ld
|
||||||
|
export AR = ar
|
||||||
|
export RM = cmd /C del
|
||||||
|
export CP = cmd /C copy
|
||||||
|
|
||||||
|
FLAGS = -Wall -fno-builtin -I../ -DDEBUG -O3
|
||||||
|
|
||||||
|
OBJS = disk.o
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
all: disk.a
|
||||||
|
|
||||||
|
disk.a: $(OBJS)
|
||||||
|
$(LD) -r -o disk.a $(OBJS)
|
||||||
|
|
||||||
|
disk.o: disk.c ../disk.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o disk.o -c disk.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o
|
||||||
|
$(RM) *.a
|
188
freeldr/freeldr/disk/disk.c
Normal file
188
freeldr/freeldr/disk/disk.c
Normal file
|
@ -0,0 +1,188 @@
|
||||||
|
/*
|
||||||
|
* FreeLoader
|
||||||
|
* Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <freeldr.h>
|
||||||
|
#include <disk.h>
|
||||||
|
#include <fs.h>
|
||||||
|
#include <rtl.h>
|
||||||
|
#include <ui.h>
|
||||||
|
#include <asmcode.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// DATA
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
GEOMETRY DriveGeometry;
|
||||||
|
ULONG VolumeHiddenSectors;
|
||||||
|
ULONG CurrentlyOpenDriveNumber;
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// FUNCTIONS
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
VOID DiskError(PUCHAR ErrorString)
|
||||||
|
{
|
||||||
|
DbgPrint((DPRINT_DISK, "%s\n", ErrorString));
|
||||||
|
|
||||||
|
if (UserInterfaceUp)
|
||||||
|
{
|
||||||
|
MessageBox(ErrorString);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%s", ErrorString);
|
||||||
|
printf("\nPress any key\n");
|
||||||
|
getch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID DiskSetDriveGeometry(ULONG Cylinders, ULONG Heads, ULONG Sectors, ULONG BytesPerSector)
|
||||||
|
{
|
||||||
|
DriveGeometry.Cylinders = Cylinders;
|
||||||
|
DriveGeometry.Heads = Heads;
|
||||||
|
DriveGeometry.Sectors = Sectors;
|
||||||
|
DriveGeometry.BytesPerSector = BytesPerSector;
|
||||||
|
|
||||||
|
DbgPrint((DPRINT_DISK, "DriveGeometry.Cylinders: %d\n", DriveGeometry.Cylinders));
|
||||||
|
DbgPrint((DPRINT_DISK, "DriveGeometry.Heads: %d\n", DriveGeometry.Heads));
|
||||||
|
DbgPrint((DPRINT_DISK, "DriveGeometry.Sectors: %d\n", DriveGeometry.Sectors));
|
||||||
|
DbgPrint((DPRINT_DISK, "DriveGeometry.BytesPerSector: %d\n", DriveGeometry.BytesPerSector));
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID DiskSetVolumeProperties(ULONG HiddenSectors)
|
||||||
|
{
|
||||||
|
VolumeHiddenSectors = HiddenSectors;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL DiskReadMultipleLogicalSectors(ULONG SectorNumber, ULONG SectorCount, PVOID Buffer)
|
||||||
|
{
|
||||||
|
/*BOOL bRetVal;
|
||||||
|
int PhysicalSector;
|
||||||
|
int PhysicalHead;
|
||||||
|
int PhysicalTrack;
|
||||||
|
int nNum;
|
||||||
|
|
||||||
|
nSect += nHiddenSectors;
|
||||||
|
|
||||||
|
while (nNumberOfSectors)
|
||||||
|
{
|
||||||
|
PhysicalSector = 1 + (nSect % nSectorsPerTrack);
|
||||||
|
PhysicalHead = (nSect / nSectorsPerTrack) % nNumberOfHeads;
|
||||||
|
PhysicalTrack = nSect / (nSectorsPerTrack * nNumberOfHeads);
|
||||||
|
|
||||||
|
if (PhysicalSector > 1)
|
||||||
|
{
|
||||||
|
if (nNumberOfSectors >= (nSectorsPerTrack - (PhysicalSector - 1)))
|
||||||
|
nNum = (nSectorsPerTrack - (PhysicalSector - 1));
|
||||||
|
else
|
||||||
|
nNum = nNumberOfSectors;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (nNumberOfSectors >= nSectorsPerTrack)
|
||||||
|
nNum = nSectorsPerTrack;
|
||||||
|
else
|
||||||
|
nNum = nNumberOfSectors;
|
||||||
|
}
|
||||||
|
|
||||||
|
bRetVal = biosdisk(CurrentlyOpenDriveNumber, PhysicalHead, PhysicalTrack, PhysicalSector, nNum, pBuffer);
|
||||||
|
|
||||||
|
if (!bRetVal)
|
||||||
|
{
|
||||||
|
FS_DO_ERROR("Disk Error");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
pBuffer += (nNum * 512);
|
||||||
|
nNumberOfSectors -= nNum;
|
||||||
|
nSect += nNum;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
ULONG CurrentSector;
|
||||||
|
PVOID RealBuffer = Buffer;
|
||||||
|
|
||||||
|
for (CurrentSector=SectorNumber; CurrentSector<(SectorNumber + SectorCount); CurrentSector++)
|
||||||
|
{
|
||||||
|
if (!DiskReadLogicalSector(CurrentSector, RealBuffer) )
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
RealBuffer += DriveGeometry.BytesPerSector;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL DiskReadLogicalSector(ULONG SectorNumber, PVOID Buffer)
|
||||||
|
{
|
||||||
|
ULONG PhysicalSector;
|
||||||
|
ULONG PhysicalHead;
|
||||||
|
ULONG PhysicalTrack;
|
||||||
|
|
||||||
|
DbgPrint((DPRINT_DISK, "ReadLogicalSector() SectorNumber: %d Buffer: 0x%x\n", SectorNumber, Buffer));
|
||||||
|
|
||||||
|
SectorNumber += VolumeHiddenSectors;
|
||||||
|
PhysicalSector = 1 + (SectorNumber % DriveGeometry.Sectors);
|
||||||
|
PhysicalHead = (SectorNumber / DriveGeometry.Sectors) % DriveGeometry.Heads;
|
||||||
|
PhysicalTrack = (SectorNumber / DriveGeometry.Sectors) / DriveGeometry.Heads;
|
||||||
|
|
||||||
|
//DbgPrint((DPRINT_FILESYSTEM, "Calling BiosInt13Read() with PhysicalHead: %d\n", PhysicalHead));
|
||||||
|
//DbgPrint((DPRINT_FILESYSTEM, "Calling BiosInt13Read() with PhysicalTrack: %d\n", PhysicalTrack));
|
||||||
|
//DbgPrint((DPRINT_FILESYSTEM, "Calling BiosInt13Read() with PhysicalSector: %d\n", PhysicalSector));
|
||||||
|
if (PhysicalHead >= DriveGeometry.Heads)
|
||||||
|
{
|
||||||
|
BugCheck((DPRINT_DISK, "PhysicalHead >= DriveGeometry.Heads\nPhysicalHead = %d\nDriveGeometry.Heads = %d\n", PhysicalHead, DriveGeometry.Heads));
|
||||||
|
}
|
||||||
|
if (PhysicalTrack >= DriveGeometry.Cylinders)
|
||||||
|
{
|
||||||
|
BugCheck((DPRINT_DISK, "PhysicalTrack >= DriveGeometry.Cylinders\nPhysicalTrack = %d\nDriveGeometry.Cylinders = %d\n", PhysicalTrack, DriveGeometry.Cylinders));
|
||||||
|
}
|
||||||
|
if (PhysicalSector > DriveGeometry.Sectors)
|
||||||
|
{
|
||||||
|
BugCheck((DPRINT_DISK, "PhysicalSector > DriveGeometry.Sectors\nPhysicalSector = %d\nDriveGeometry.Sectors = %d\n", PhysicalSector, DriveGeometry.Sectors));
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check to see if it is a fixed disk drive
|
||||||
|
// If so then check to see if Int13 extensions work
|
||||||
|
// If they do then use them, otherwise default back to BIOS calls
|
||||||
|
//
|
||||||
|
if ((CurrentlyOpenDriveNumber >= 0x80) && (BiosInt13ExtensionsSupported(CurrentlyOpenDriveNumber)) && (SectorNumber > (DriveGeometry.Cylinders * DriveGeometry.Heads * DriveGeometry.Sectors)))
|
||||||
|
{
|
||||||
|
DbgPrint((DPRINT_DISK, "Using Int 13 Extensions for read. BiosInt13ExtensionsSupported(%d) = %s\n", CurrentlyOpenDriveNumber, BiosInt13ExtensionsSupported(CurrentlyOpenDriveNumber) ? "TRUE" : "FALSE"));
|
||||||
|
if ( !BiosInt13ReadExtended(CurrentlyOpenDriveNumber, SectorNumber, 1, Buffer) )
|
||||||
|
{
|
||||||
|
DiskError("Disk read error.");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( !BiosInt13Read(CurrentlyOpenDriveNumber, PhysicalHead, PhysicalTrack, PhysicalSector, 1, Buffer) )
|
||||||
|
{
|
||||||
|
DiskError("Disk read error.");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
|
@ -18,15 +18,14 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include "freeldr.h"
|
||||||
#include "stdlib.h"
|
#include "rtl.h"
|
||||||
#include "fs.h"
|
#include "fs.h"
|
||||||
#include "reactos/reactos.h"
|
#include "reactos.h"
|
||||||
#include "tui.h"
|
#include "ui.h"
|
||||||
#include "asmcode.h"
|
#include "asmcode.h"
|
||||||
#include "menu.h"
|
|
||||||
#include "miscboot.h"
|
#include "miscboot.h"
|
||||||
#include "linux.h"
|
#include "linux.h"
|
||||||
#include "memory.h"
|
#include "mm.h"
|
||||||
#include "parseini.h"
|
#include "parseini.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "oslist.h"
|
#include "oslist.h"
|
||||||
|
|
|
@ -75,24 +75,11 @@ typedef struct _MASTER_BOOT_RECORD
|
||||||
#define PARTITION_LDM 0x42 // Logical Disk Manager partition
|
#define PARTITION_LDM 0x42 // Logical Disk Manager partition
|
||||||
#define PARTITION_UNIX 0x63 // Unix
|
#define PARTITION_UNIX 0x63 // Unix
|
||||||
|
|
||||||
typedef struct _GEOMETRY
|
|
||||||
{
|
|
||||||
ULONG Cylinders;
|
|
||||||
ULONG Heads;
|
|
||||||
ULONG Sectors;
|
|
||||||
ULONG BytesPerSector;
|
|
||||||
|
|
||||||
} GEOMETRY, *PGEOMETRY;
|
|
||||||
|
|
||||||
#define FILE VOID
|
#define FILE VOID
|
||||||
#define PFILE FILE *
|
#define PFILE FILE *
|
||||||
|
|
||||||
VOID FileSystemError(PUCHAR ErrorString);
|
VOID FileSystemError(PUCHAR ErrorString);
|
||||||
BOOL OpenDiskDrive(ULONG DriveNumber, ULONG PartitionNumber);
|
BOOL OpenDiskDrive(ULONG DriveNumber, ULONG PartitionNumber);
|
||||||
VOID SetDriveGeometry(ULONG Cylinders, ULONG Heads, ULONG Sectors, ULONG BytesPerSector);
|
|
||||||
VOID SetVolumeProperties(ULONG HiddenSectors);
|
|
||||||
BOOL ReadMultipleLogicalSectors(ULONG SectorNumber, ULONG SectorCount, PVOID Buffer);
|
|
||||||
BOOL ReadLogicalSector(ULONG SectorNumber, PVOID Buffer);
|
|
||||||
PFILE OpenFile(PUCHAR FileName);
|
PFILE OpenFile(PUCHAR FileName);
|
||||||
VOID CloseFile(PFILE FileHandle);
|
VOID CloseFile(PFILE FileHandle);
|
||||||
BOOL ReadFile(PFILE FileHandle, ULONG BytesToRead, PULONG BytesRead, PVOID Buffer);
|
BOOL ReadFile(PFILE FileHandle, ULONG BytesToRead, PULONG BytesRead, PVOID Buffer);
|
||||||
|
|
46
freeldr/freeldr/fs/Makefile
Normal file
46
freeldr/freeldr/fs/Makefile
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#
|
||||||
|
# FreeLoader
|
||||||
|
# Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
export CC = gcc
|
||||||
|
export LD = ld
|
||||||
|
export AR = ar
|
||||||
|
export RM = cmd /C del
|
||||||
|
export CP = cmd /C copy
|
||||||
|
|
||||||
|
FLAGS = -Wall -fno-builtin -I../ -DDEBUG -O3
|
||||||
|
|
||||||
|
OBJS = fs.o fat.o
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
all: fs.a
|
||||||
|
|
||||||
|
fs.a: $(OBJS)
|
||||||
|
$(LD) -r -o fs.a $(OBJS)
|
||||||
|
|
||||||
|
fs.o: fs.c fat.h ../fs.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o fs.o -c fs.c
|
||||||
|
|
||||||
|
fat.o: fat.c fat.h ../fs.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o fat.o -c fat.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o
|
||||||
|
$(RM) *.a
|
|
@ -17,14 +17,15 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "fs.h"
|
#include <fs.h>
|
||||||
#include "fat.h"
|
#include "fat.h"
|
||||||
#include "stdlib.h"
|
#include <disk.h>
|
||||||
#include "tui.h"
|
#include <rtl.h>
|
||||||
#include "asmcode.h"
|
#include <ui.h>
|
||||||
#include "memory.h"
|
#include <asmcode.h>
|
||||||
#include "debug.h"
|
#include <mm.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
|
||||||
PFAT_BOOTSECTOR FatVolumeBootSector = NULL;
|
PFAT_BOOTSECTOR FatVolumeBootSector = NULL;
|
||||||
|
@ -152,8 +153,8 @@ BOOL FatOpenVolume(ULONG DriveNumber, ULONG VolumeStartHead, ULONG VolumeStartTr
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetDriveGeometry(get_cylinders(DriveNumber), get_heads(DriveNumber), get_sectors(DriveNumber), FatVolumeBootSector->BytesPerSector);
|
DiskSetDriveGeometry(get_cylinders(DriveNumber), get_heads(DriveNumber), get_sectors(DriveNumber), FatVolumeBootSector->BytesPerSector);
|
||||||
SetVolumeProperties(FatVolumeBootSector->HiddenSectors);
|
DiskSetVolumeProperties(FatVolumeBootSector->HiddenSectors);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check the FAT cluster size
|
// Check the FAT cluster size
|
||||||
|
@ -267,7 +268,7 @@ PVOID FatBufferDirectory(UINT32 DirectoryStartCluster, PUINT32 EntryCountPointer
|
||||||
RootDirectoryStartSector = FatVolumeBootSector->ReservedSectors + (FatVolumeBootSector->NumberOfFats * FatVolumeBootSector->SectorsPerFat);
|
RootDirectoryStartSector = FatVolumeBootSector->ReservedSectors + (FatVolumeBootSector->NumberOfFats * FatVolumeBootSector->SectorsPerFat);
|
||||||
RootDirectorySectorCount = FatVolumeBootSector->RootDirEntries / 32;
|
RootDirectorySectorCount = FatVolumeBootSector->RootDirEntries / 32;
|
||||||
|
|
||||||
if (!ReadMultipleLogicalSectors(RootDirectoryStartSector, RootDirectorySectorCount, DirectoryBuffer))
|
if (!DiskReadMultipleLogicalSectors(RootDirectoryStartSector, RootDirectorySectorCount, DirectoryBuffer))
|
||||||
{
|
{
|
||||||
FreeMemory(DirectoryBuffer);
|
FreeMemory(DirectoryBuffer);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -698,14 +699,14 @@ DWORD FatGetFatEntry(DWORD nCluster)
|
||||||
|
|
||||||
if (ThisFatEntOffset == (FatVolumeBootSector->BytesPerSector - 1))
|
if (ThisFatEntOffset == (FatVolumeBootSector->BytesPerSector - 1))
|
||||||
{
|
{
|
||||||
if (!ReadMultipleLogicalSectors(ThisFatSecNum, 2, (PVOID)DISKREADBUFFER))
|
if (!DiskReadMultipleLogicalSectors(ThisFatSecNum, 2, (PVOID)DISKREADBUFFER))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!ReadLogicalSector(ThisFatSecNum, (PVOID)DISKREADBUFFER))
|
if (!DiskReadLogicalSector(ThisFatSecNum, (PVOID)DISKREADBUFFER))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -725,7 +726,7 @@ DWORD FatGetFatEntry(DWORD nCluster)
|
||||||
ThisFatSecNum = FatVolumeBootSector->ReservedSectors + (FatOffset / FatVolumeBootSector->BytesPerSector);
|
ThisFatSecNum = FatVolumeBootSector->ReservedSectors + (FatOffset / FatVolumeBootSector->BytesPerSector);
|
||||||
ThisFatEntOffset = (FatOffset % FatVolumeBootSector->BytesPerSector);
|
ThisFatEntOffset = (FatOffset % FatVolumeBootSector->BytesPerSector);
|
||||||
|
|
||||||
if (!ReadLogicalSector(ThisFatSecNum, (PVOID)DISKREADBUFFER))
|
if (!DiskReadLogicalSector(ThisFatSecNum, (PVOID)DISKREADBUFFER))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -740,7 +741,7 @@ DWORD FatGetFatEntry(DWORD nCluster)
|
||||||
ThisFatSecNum = FatVolumeBootSector->ReservedSectors + (FatOffset / FatVolumeBootSector->BytesPerSector);
|
ThisFatSecNum = FatVolumeBootSector->ReservedSectors + (FatOffset / FatVolumeBootSector->BytesPerSector);
|
||||||
ThisFatEntOffset = (FatOffset % FatVolumeBootSector->BytesPerSector);
|
ThisFatEntOffset = (FatOffset % FatVolumeBootSector->BytesPerSector);
|
||||||
|
|
||||||
if (!ReadLogicalSector(ThisFatSecNum, (PVOID)DISKREADBUFFER))
|
if (!DiskReadLogicalSector(ThisFatSecNum, (PVOID)DISKREADBUFFER))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -885,7 +886,7 @@ BOOL FatReadCluster(ULONG ClusterNumber, PVOID Buffer)
|
||||||
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "FatReadCluster() ClusterNumber = %d Buffer = 0x%x ClusterStartSector = %d\n", ClusterNumber, Buffer, ClusterStartSector));
|
DbgPrint((DPRINT_FILESYSTEM, "FatReadCluster() ClusterNumber = %d Buffer = 0x%x ClusterStartSector = %d\n", ClusterNumber, Buffer, ClusterStartSector));
|
||||||
|
|
||||||
if (!ReadMultipleLogicalSectors(ClusterStartSector, FatVolumeBootSector->SectorsPerCluster, (PVOID)DISKREADBUFFER))
|
if (!DiskReadMultipleLogicalSectors(ClusterStartSector, FatVolumeBootSector->SectorsPerCluster, (PVOID)DISKREADBUFFER))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -917,7 +918,7 @@ BOOL FatReadClusterChain(ULONG StartClusterNumber, ULONG NumberOfClusters, PVOID
|
||||||
//
|
//
|
||||||
// Read cluster into memory
|
// Read cluster into memory
|
||||||
//
|
//
|
||||||
if (!ReadMultipleLogicalSectors(ClusterStartSector, FatVolumeBootSector->SectorsPerCluster, (PVOID)DISKREADBUFFER))
|
if (!DiskReadMultipleLogicalSectors(ClusterStartSector, FatVolumeBootSector->SectorsPerCluster, (PVOID)DISKREADBUFFER))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -965,7 +966,7 @@ BOOL FatReadPartialCluster(ULONG ClusterNumber, ULONG StartingOffset, ULONG Leng
|
||||||
|
|
||||||
ClusterStartSector = ((ClusterNumber - 2) * FatVolumeBootSector->SectorsPerCluster) + DataSectorStart;
|
ClusterStartSector = ((ClusterNumber - 2) * FatVolumeBootSector->SectorsPerCluster) + DataSectorStart;
|
||||||
|
|
||||||
if (!ReadMultipleLogicalSectors(ClusterStartSector, FatVolumeBootSector->SectorsPerCluster, (PVOID)DISKREADBUFFER))
|
if (!DiskReadMultipleLogicalSectors(ClusterStartSector, FatVolumeBootSector->SectorsPerCluster, (PVOID)DISKREADBUFFER))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
|
@ -17,13 +17,14 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "fs.h"
|
#include <fs.h>
|
||||||
#include "fat.h"
|
#include "fat.h"
|
||||||
#include "stdlib.h"
|
#include <disk.h>
|
||||||
#include "tui.h"
|
#include <rtl.h>
|
||||||
#include "asmcode.h"
|
#include <ui.h>
|
||||||
#include "debug.h"
|
#include <asmcode.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -230,136 +231,6 @@ BOOL OpenDiskDrive(ULONG DriveNumber, ULONG PartitionNumber)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID SetDriveGeometry(ULONG Cylinders, ULONG Heads, ULONG Sectors, ULONG BytesPerSector)
|
|
||||||
{
|
|
||||||
DriveGeometry.Cylinders = Cylinders;
|
|
||||||
DriveGeometry.Heads = Heads;
|
|
||||||
DriveGeometry.Sectors = Sectors;
|
|
||||||
DriveGeometry.BytesPerSector = BytesPerSector;
|
|
||||||
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "DriveGeometry.Cylinders: %d\n", DriveGeometry.Cylinders));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "DriveGeometry.Heads: %d\n", DriveGeometry.Heads));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "DriveGeometry.Sectors: %d\n", DriveGeometry.Sectors));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "DriveGeometry.BytesPerSector: %d\n", DriveGeometry.BytesPerSector));
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID SetVolumeProperties(ULONG HiddenSectors)
|
|
||||||
{
|
|
||||||
VolumeHiddenSectors = HiddenSectors;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL ReadMultipleLogicalSectors(ULONG SectorNumber, ULONG SectorCount, PVOID Buffer)
|
|
||||||
{
|
|
||||||
/*BOOL bRetVal;
|
|
||||||
int PhysicalSector;
|
|
||||||
int PhysicalHead;
|
|
||||||
int PhysicalTrack;
|
|
||||||
int nNum;
|
|
||||||
|
|
||||||
nSect += nHiddenSectors;
|
|
||||||
|
|
||||||
while (nNumberOfSectors)
|
|
||||||
{
|
|
||||||
PhysicalSector = 1 + (nSect % nSectorsPerTrack);
|
|
||||||
PhysicalHead = (nSect / nSectorsPerTrack) % nNumberOfHeads;
|
|
||||||
PhysicalTrack = nSect / (nSectorsPerTrack * nNumberOfHeads);
|
|
||||||
|
|
||||||
if (PhysicalSector > 1)
|
|
||||||
{
|
|
||||||
if (nNumberOfSectors >= (nSectorsPerTrack - (PhysicalSector - 1)))
|
|
||||||
nNum = (nSectorsPerTrack - (PhysicalSector - 1));
|
|
||||||
else
|
|
||||||
nNum = nNumberOfSectors;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (nNumberOfSectors >= nSectorsPerTrack)
|
|
||||||
nNum = nSectorsPerTrack;
|
|
||||||
else
|
|
||||||
nNum = nNumberOfSectors;
|
|
||||||
}
|
|
||||||
|
|
||||||
bRetVal = biosdisk(CurrentlyOpenDriveNumber, PhysicalHead, PhysicalTrack, PhysicalSector, nNum, pBuffer);
|
|
||||||
|
|
||||||
if (!bRetVal)
|
|
||||||
{
|
|
||||||
FS_DO_ERROR("Disk Error");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
pBuffer += (nNum * 512);
|
|
||||||
nNumberOfSectors -= nNum;
|
|
||||||
nSect += nNum;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
ULONG CurrentSector;
|
|
||||||
PVOID RealBuffer = Buffer;
|
|
||||||
|
|
||||||
for (CurrentSector=SectorNumber; CurrentSector<(SectorNumber + SectorCount); CurrentSector++)
|
|
||||||
{
|
|
||||||
if (!ReadLogicalSector(CurrentSector, RealBuffer) )
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
RealBuffer += DriveGeometry.BytesPerSector;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL ReadLogicalSector(ULONG SectorNumber, PVOID Buffer)
|
|
||||||
{
|
|
||||||
ULONG PhysicalSector;
|
|
||||||
ULONG PhysicalHead;
|
|
||||||
ULONG PhysicalTrack;
|
|
||||||
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "ReadLogicalSector() SectorNumber: %d Buffer: 0x%x\n", SectorNumber, Buffer));
|
|
||||||
|
|
||||||
SectorNumber += VolumeHiddenSectors;
|
|
||||||
PhysicalSector = 1 + (SectorNumber % DriveGeometry.Sectors);
|
|
||||||
PhysicalHead = (SectorNumber / DriveGeometry.Sectors) % DriveGeometry.Heads;
|
|
||||||
PhysicalTrack = (SectorNumber / DriveGeometry.Sectors) / DriveGeometry.Heads;
|
|
||||||
|
|
||||||
//DbgPrint((DPRINT_FILESYSTEM, "Calling BiosInt13Read() with PhysicalHead: %d\n", PhysicalHead));
|
|
||||||
//DbgPrint((DPRINT_FILESYSTEM, "Calling BiosInt13Read() with PhysicalTrack: %d\n", PhysicalTrack));
|
|
||||||
//DbgPrint((DPRINT_FILESYSTEM, "Calling BiosInt13Read() with PhysicalSector: %d\n", PhysicalSector));
|
|
||||||
if (PhysicalHead >= DriveGeometry.Heads)
|
|
||||||
{
|
|
||||||
BugCheck((DPRINT_FILESYSTEM, "PhysicalHead >= DriveGeometry.Heads\nPhysicalHead = %d\nDriveGeometry.Heads = %d\n", PhysicalHead, DriveGeometry.Heads));
|
|
||||||
}
|
|
||||||
if (PhysicalTrack >= DriveGeometry.Cylinders)
|
|
||||||
{
|
|
||||||
BugCheck((DPRINT_FILESYSTEM, "PhysicalTrack >= DriveGeometry.Cylinders\nPhysicalTrack = %d\nDriveGeometry.Cylinders = %d\n", PhysicalTrack, DriveGeometry.Cylinders));
|
|
||||||
}
|
|
||||||
if (PhysicalSector > DriveGeometry.Sectors)
|
|
||||||
{
|
|
||||||
BugCheck((DPRINT_FILESYSTEM, "PhysicalSector > DriveGeometry.Sectors\nPhysicalSector = %d\nDriveGeometry.Sectors = %d\n", PhysicalSector, DriveGeometry.Sectors));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((CurrentlyOpenDriveNumber >= 0x80) &&
|
|
||||||
(BiosInt13ExtensionsSupported(CurrentlyOpenDriveNumber)) &&
|
|
||||||
(SectorNumber > (DriveGeometry.Cylinders * DriveGeometry.Heads * DriveGeometry.Sectors)))
|
|
||||||
{
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "Using Int 13 Extensions for read. BiosInt13ExtensionsSupported(%d) = %s\n", CurrentlyOpenDriveNumber, BiosInt13ExtensionsSupported(CurrentlyOpenDriveNumber) ? "TRUE" : "FALSE"));
|
|
||||||
if ( !BiosInt13ReadExtended(CurrentlyOpenDriveNumber, SectorNumber, 1, Buffer) )
|
|
||||||
{
|
|
||||||
FileSystemError("Disk read error.");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( !BiosInt13Read(CurrentlyOpenDriveNumber, PhysicalHead, PhysicalTrack, PhysicalSector, 1, Buffer) )
|
|
||||||
{
|
|
||||||
FileSystemError("Disk read error.");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
PFILE OpenFile(PUCHAR FileName)
|
PFILE OpenFile(PUCHAR FileName)
|
||||||
{
|
{
|
||||||
PFILE FileHandle = NULL;
|
PFILE FileHandle = NULL;
|
|
@ -21,9 +21,9 @@
|
||||||
#include "freeldr.h"
|
#include "freeldr.h"
|
||||||
#include "asmcode.h"
|
#include "asmcode.h"
|
||||||
#include "miscboot.h"
|
#include "miscboot.h"
|
||||||
#include "stdlib.h"
|
#include "rtl.h"
|
||||||
#include "fs.h"
|
#include "fs.h"
|
||||||
#include "tui.h"
|
#include "ui.h"
|
||||||
#include "linux.h"
|
#include "linux.h"
|
||||||
|
|
||||||
void LoadAndBootLinux(int DriveNum, int Partition, char *vmlinuz, char *cmd_line)
|
void LoadAndBootLinux(int DriveNum, int Partition, char *vmlinuz, char *cmd_line)
|
||||||
|
|
|
@ -21,9 +21,9 @@
|
||||||
#include "freeldr.h"
|
#include "freeldr.h"
|
||||||
#include "asmcode.h"
|
#include "asmcode.h"
|
||||||
#include "miscboot.h"
|
#include "miscboot.h"
|
||||||
#include "stdlib.h"
|
#include "rtl.h"
|
||||||
#include "fs.h"
|
#include "fs.h"
|
||||||
#include "tui.h"
|
#include "ui.h"
|
||||||
#include "parseini.h"
|
#include "parseini.h"
|
||||||
|
|
||||||
void LoadAndBootBootSector(int nOSToBoot)
|
void LoadAndBootBootSector(int nOSToBoot)
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#ifndef __MEMORY_H
|
#ifndef __MEMORY_H
|
||||||
#define __MEMORY_H
|
#define __MEMORY_H
|
||||||
|
|
||||||
#include "multiboot.h"
|
#include <multiboot.h>
|
||||||
|
|
||||||
|
|
||||||
VOID InitMemoryManager(PVOID BaseAddress, ULONG Length);
|
VOID InitMemoryManager(PVOID BaseAddress, ULONG Length);
|
43
freeldr/freeldr/mm/Makefile
Normal file
43
freeldr/freeldr/mm/Makefile
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
#
|
||||||
|
# FreeLoader
|
||||||
|
# Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
export CC = gcc
|
||||||
|
export LD = ld
|
||||||
|
export AR = ar
|
||||||
|
export RM = cmd /C del
|
||||||
|
export CP = cmd /C copy
|
||||||
|
|
||||||
|
FLAGS = -Wall -fno-builtin -I../ -DDEBUG -O3
|
||||||
|
|
||||||
|
OBJS = mm.o
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
all: mm.a
|
||||||
|
|
||||||
|
mm.a: $(OBJS)
|
||||||
|
$(LD) -r -o mm.a $(OBJS)
|
||||||
|
|
||||||
|
mm.o: mm.c ../mm.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o mm.o -c mm.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o
|
||||||
|
$(RM) *.a
|
|
@ -17,11 +17,11 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "memory.h"
|
#include <mm.h>
|
||||||
#include "stdlib.h"
|
#include <rtl.h>
|
||||||
#include "debug.h"
|
#include <debug.h>
|
||||||
#include "tui.h"
|
#include <ui.h>
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -72,8 +72,8 @@ VOID InitMemoryManager(PVOID BaseAddress, ULONG Length)
|
||||||
HeapMemBlockArray = (PMEMBLOCK)(HeapBaseAddress + HeapLengthInBytes);
|
HeapMemBlockArray = (PMEMBLOCK)(HeapBaseAddress + HeapLengthInBytes);
|
||||||
|
|
||||||
// Clear the memory
|
// Clear the memory
|
||||||
ZeroMemory(HeapBaseAddress, HeapLengthInBytes);
|
RtlZeroMemory(HeapBaseAddress, HeapLengthInBytes);
|
||||||
ZeroMemory(HeapMemBlockArray, (HeapMemBlockCount * sizeof(MEMBLOCK)));
|
RtlZeroMemory(HeapMemBlockArray, (HeapMemBlockCount * sizeof(MEMBLOCK)));
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
DbgPrint((DPRINT_MEMORY, "Memory Manager initialized. BaseAddress = 0x%x Length = 0x%x. %d blocks in heap.\n", BaseAddress, Length, HeapMemBlockCount));
|
DbgPrint((DPRINT_MEMORY, "Memory Manager initialized. BaseAddress = 0x%x Length = 0x%x. %d blocks in heap.\n", BaseAddress, Length, HeapMemBlockCount));
|
|
@ -20,10 +20,10 @@
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include "freeldr.h"
|
||||||
#include "asmcode.h"
|
#include "asmcode.h"
|
||||||
#include "stdlib.h"
|
#include "rtl.h"
|
||||||
#include "fs.h"
|
#include "fs.h"
|
||||||
#include "multiboot.h"
|
#include "multiboot.h"
|
||||||
#include "tui.h"
|
#include "ui.h"
|
||||||
#include "parseini.h"
|
#include "parseini.h"
|
||||||
|
|
||||||
unsigned long next_module_load_base = 0;
|
unsigned long next_module_load_base = 0;
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include "freeldr.h"
|
||||||
#include "stdlib.h"
|
#include "rtl.h"
|
||||||
#include "tui.h"
|
#include "ui.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "miscboot.h"
|
#include "miscboot.h"
|
||||||
|
|
||||||
|
|
|
@ -20,9 +20,9 @@
|
||||||
#include "freeldr.h"
|
#include "freeldr.h"
|
||||||
#include "parseini.h"
|
#include "parseini.h"
|
||||||
#include "oslist.h"
|
#include "oslist.h"
|
||||||
#include "stdlib.h"
|
#include "rtl.h"
|
||||||
#include "memory.h"
|
#include "mm.h"
|
||||||
#include "tui.h"
|
#include "ui.h"
|
||||||
|
|
||||||
BOOL InitOperatingSystemList(PUCHAR **SectionNamesPointer, PUCHAR **DisplayNamesPointer, PULONG OperatingSystemCountPointer)
|
BOOL InitOperatingSystemList(PUCHAR **SectionNamesPointer, PUCHAR **DisplayNamesPointer, PULONG OperatingSystemCountPointer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include "freeldr.h"
|
||||||
#include "parseini.h"
|
#include "parseini.h"
|
||||||
#include "tui.h"
|
#include "ui.h"
|
||||||
#include "fs.h"
|
#include "fs.h"
|
||||||
#include "stdlib.h"
|
#include "rtl.h"
|
||||||
#include "memory.h"
|
#include "mm.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
PUCHAR FreeLoaderIniFileData = NULL;
|
PUCHAR FreeLoaderIniFileData = NULL;
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* FreeLoader - arcname.h
|
* FreeLoader
|
||||||
*
|
*
|
||||||
* Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
|
* Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
* Copyright (C) 2001 Eric Kohl
|
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -19,11 +18,26 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __ARCNAME_H
|
#ifndef __REACTOS_H
|
||||||
#define __ARCNAME_H
|
#define __REACTOS_H
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// ReactOS Loading Functions
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void LoadAndBootReactOS(PUCHAR OperatingSystemName);
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// ARC Path Functions
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
BOOL DissectArcPath(char *ArcPath, char *BootPath, PULONG BootDrive, PULONG BootPartition);
|
BOOL DissectArcPath(char *ArcPath, char *BootPath, PULONG BootDrive, PULONG BootPartition);
|
||||||
//BOOL ConvertBiosDriveToArcName(PUCHAR ArcName, ULONG BiosDriveNumber);
|
//BOOL ConvertBiosDriveToArcName(PUCHAR ArcName, ULONG BiosDriveNumber);
|
||||||
//ULONG ConvertArcNameToBiosDrive(PUCHAR ArcName);
|
//ULONG ConvertArcNameToBiosDrive(PUCHAR ArcName);
|
||||||
|
|
||||||
#endif // defined __ARCNAME_H
|
|
||||||
|
#endif // defined __REACTOS_H
|
55
freeldr/freeldr/reactos/Makefile
Normal file
55
freeldr/freeldr/reactos/Makefile
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#
|
||||||
|
# FreeLoader
|
||||||
|
# Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
export CC = gcc
|
||||||
|
export LD = ld
|
||||||
|
export AR = ar
|
||||||
|
export RM = cmd /C del
|
||||||
|
export CP = cmd /C copy
|
||||||
|
|
||||||
|
FLAGS = -Wall -fno-builtin -I../ -DDEBUG -O3
|
||||||
|
|
||||||
|
OBJS = reactos.o arcname.o hwdetect.o reghive.o registry.o
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
all: reactos.a
|
||||||
|
|
||||||
|
reactos.a: $(OBJS)
|
||||||
|
$(LD) -r -o reactos.a $(OBJS)
|
||||||
|
|
||||||
|
reactos.o: reactos.c ../reactos.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o reactos.o -c reactos.c
|
||||||
|
|
||||||
|
arcname.o: arcname.c ../reactos.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o arcname.o -c arcname.c
|
||||||
|
|
||||||
|
hwdetect.o: hwdetect.c ../reactos.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o hwdetect.o -c hwdetect.c
|
||||||
|
|
||||||
|
reghive.o: reghive.c ../reactos.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o reghive.o -c reghive.c
|
||||||
|
|
||||||
|
registry.o: registry.c ../reactos.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o registry.o -c registry.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o
|
||||||
|
$(RM) *.a
|
|
@ -19,9 +19,8 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "arcname.h"
|
#include <rtl.h>
|
||||||
#include "stdlib.h"
|
|
||||||
|
|
||||||
|
|
||||||
BOOL DissectArcPath(char *ArcPath, char *BootPath, PULONG BootDrive, PULONG BootPartition)
|
BOOL DissectArcPath(char *ArcPath, char *BootPath, PULONG BootDrive, PULONG BootPartition)
|
|
@ -18,8 +18,8 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "../stdlib.h"
|
#include <rtl.h>
|
||||||
|
|
||||||
//#define NDEBUG
|
//#define NDEBUG
|
||||||
|
|
||||||
|
|
|
@ -18,16 +18,15 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "../asmcode.h"
|
#include <asmcode.h>
|
||||||
#include "reactos.h"
|
#include <reactos.h>
|
||||||
#include "../stdlib.h"
|
#include <rtl.h>
|
||||||
#include "../fs.h"
|
#include <fs.h>
|
||||||
#include "../tui.h"
|
#include <ui.h>
|
||||||
#include "../multiboot.h"
|
#include <multiboot.h>
|
||||||
#include "../arcname.h"
|
#include <mm.h>
|
||||||
#include "../memory.h"
|
#include <parseini.h>
|
||||||
#include "../parseini.h"
|
|
||||||
|
|
||||||
#include "registry.h"
|
#include "registry.h"
|
||||||
#include "hwdetect.h"
|
#include "hwdetect.h"
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
/*
|
|
||||||
* FreeLoader
|
|
||||||
*
|
|
||||||
* Copyright (C) 1999, 2000 Brian Palmer <brianp@sginet.com>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __REACTOS_H
|
|
||||||
#define __REACTOS_H
|
|
||||||
|
|
||||||
|
|
||||||
void LoadAndBootReactOS(PUCHAR OperatingSystemName);
|
|
||||||
|
|
||||||
|
|
||||||
#endif // defined __REACTOS_H
|
|
|
@ -19,9 +19,9 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "../stdlib.h"
|
#include <rtl.h>
|
||||||
#include "../memory.h"
|
#include <mm.h>
|
||||||
|
|
||||||
#include "registry.h"
|
#include "registry.h"
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
* - Fix RegEnumValue().
|
* - Fix RegEnumValue().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "../memory.h"
|
#include <mm.h>
|
||||||
#include "../stdlib.h"
|
#include <rtl.h>
|
||||||
#include "registry.h"
|
#include "registry.h"
|
||||||
|
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
/*
|
|
||||||
* FreeLoader
|
|
||||||
* Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
|
|
||||||
* Copyright (C) 2001 Eric Kohl
|
|
||||||
* Copyright (C) 2001 Emanuele Aliberti
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __RS232_H
|
|
||||||
#define __RS232_H
|
|
||||||
|
|
||||||
BOOL Rs232PortInitialize(ULONG ComPort, ULONG BaudRate);
|
|
||||||
BOOL Rs232PortGetByte(PUCHAR ByteRecieved);
|
|
||||||
BOOL Rs232PortPollByte(PUCHAR ByteRecieved);
|
|
||||||
VOID Rs232PortPutByte(UCHAR ByteToSend);
|
|
||||||
|
|
||||||
|
|
||||||
#endif // defined __RS232_H
|
|
106
freeldr/freeldr/rtl.h
Normal file
106
freeldr/freeldr/rtl.h
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
/*
|
||||||
|
* FreeLoader
|
||||||
|
* Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __STDLIB_H
|
||||||
|
#define __STDLIB_H
|
||||||
|
|
||||||
|
#include <freeldr.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// String Functions
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
int strlen(char *str);
|
||||||
|
char * strcpy(char *dest, char *src);
|
||||||
|
char * strncpy(char *dest, char *src, size_t count);
|
||||||
|
char * strcat(char *dest, char *src);
|
||||||
|
char * strchr(const char *s, int c);
|
||||||
|
char * strrchr(const char *s, int c);
|
||||||
|
int strcmp(const char *string1, const char *string2);
|
||||||
|
int stricmp(const char *string1, const char *string2);
|
||||||
|
int strncmp(const char *string1, const char *string2, size_t length);
|
||||||
|
int _strnicmp(const char *string1, const char *string2, size_t length);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Memory Functions
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
int RtlCompareMemory(const PVOID Source1, const PVOID Source2, ULONG Length);
|
||||||
|
VOID RtlCopyMemory(PVOID Destination, const PVOID Source, ULONG Length);
|
||||||
|
VOID RtlFillMemory(PVOID Destination, ULONG Length, UCHAR Fill);
|
||||||
|
VOID RtlZeroMemory(PVOID Destination, ULONG Length);
|
||||||
|
|
||||||
|
#define memcmp(buf1, buf2, count) RtlCompareMemory(buf1, buf2, count)
|
||||||
|
#define memcpy(dest, src, count) RtlCopyMemory(dest, src,count)
|
||||||
|
#define memset(dest, c, count) RtlFillMemory(dest,count, c)
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Standard Library Functions
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
int atoi(char *string);
|
||||||
|
char * itoa(int value, char *string, int radix);
|
||||||
|
int toupper(int c);
|
||||||
|
int tolower(int c);
|
||||||
|
|
||||||
|
int isspace(int c);
|
||||||
|
int isdigit(int c);
|
||||||
|
int isxdigit(int c);
|
||||||
|
|
||||||
|
char * convert_to_ascii(char *buf, int c, ...);
|
||||||
|
|
||||||
|
void putchar(int ch); // Implemented in asmcode.S
|
||||||
|
void clrscr(void); // Implemented in asmcode.S
|
||||||
|
int kbhit(void); // Implemented in asmcode.S
|
||||||
|
int getch(void); // Implemented in asmcode.S
|
||||||
|
void gotoxy(int x, int y); // Implemented in asmcode.S
|
||||||
|
int getyear(void); // Implemented in asmcode.S
|
||||||
|
int getday(void); // Implemented in asmcode.S
|
||||||
|
int getmonth(void); // Implemented in asmcode.S
|
||||||
|
int gethour(void); // Implemented in asmcode.S
|
||||||
|
int getminute(void); // Implemented in asmcode.S
|
||||||
|
int getsecond(void); // Implemented in asmcode.S
|
||||||
|
void hidecursor(void); // Implemented in asmcode.S
|
||||||
|
void showcursor(void); // Implemented in asmcode.S
|
||||||
|
int wherex(void); // Implemented in asmcode.S
|
||||||
|
int wherey(void); // Implemented in asmcode.S
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Screen Output Functions
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void print(char *str);
|
||||||
|
void printf(char *fmt, ...);
|
||||||
|
void sprintf(char *buffer, char *format, ...);
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef max
|
||||||
|
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef min
|
||||||
|
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif // defined __STDLIB_H
|
52
freeldr/freeldr/rtl/Makefile
Normal file
52
freeldr/freeldr/rtl/Makefile
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
#
|
||||||
|
# FreeLoader
|
||||||
|
# Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
export CC = gcc
|
||||||
|
export LD = ld
|
||||||
|
export AR = ar
|
||||||
|
export RM = cmd /C del
|
||||||
|
export CP = cmd /C copy
|
||||||
|
|
||||||
|
FLAGS = -Wall -fno-builtin -I../ -DDEBUG -O3
|
||||||
|
|
||||||
|
OBJS = memory.o print.o stdlib.o string.o
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
all: rtl.a
|
||||||
|
|
||||||
|
rtl.a: $(OBJS)
|
||||||
|
$(LD) -r -o rtl.a $(OBJS)
|
||||||
|
|
||||||
|
memory.o: memory.c ../rtl.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o memory.o -c memory.c
|
||||||
|
|
||||||
|
print.o: print.c ../rtl.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o print.o -c print.c
|
||||||
|
|
||||||
|
stdlib.o: stdlib.c ../rtl.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o stdlib.o -c stdlib.c
|
||||||
|
|
||||||
|
string.o: string.c ../rtl.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o string.o -c string.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o
|
||||||
|
$(RM) *.a
|
|
@ -17,9 +17,51 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __MENU_H
|
#include <freeldr.h>
|
||||||
#define __MENU_H
|
|
||||||
|
|
||||||
BOOL DisplayMenu(PUCHAR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, PULONG SelectedMenuItem);
|
int RtlCompareMemory(const PVOID Source1, const PVOID Source2, ULONG Length)
|
||||||
|
{
|
||||||
|
ULONG i;
|
||||||
|
const PCHAR buffer1 = Source1;
|
||||||
|
const PCHAR buffer2 = Source2;
|
||||||
|
|
||||||
#endif // #defined __MENU_H
|
for (i=0; i<Length; i++)
|
||||||
|
{
|
||||||
|
if(buffer1[i] == buffer2[i])
|
||||||
|
continue;
|
||||||
|
else
|
||||||
|
return (buffer1[i] - buffer2[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID RtlCopyMemory(PVOID Destination, const PVOID Source, ULONG Length)
|
||||||
|
{
|
||||||
|
ULONG i;
|
||||||
|
PCHAR buf1 = Destination;
|
||||||
|
const PCHAR buf2 = Source;
|
||||||
|
|
||||||
|
for (i=0; i<Length; i++)
|
||||||
|
{
|
||||||
|
buf1[i] = buf2[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID RtlFillMemory(PVOID Destination, ULONG Length, UCHAR Fill)
|
||||||
|
{
|
||||||
|
ULONG i;
|
||||||
|
PUCHAR buf1 = Destination;
|
||||||
|
|
||||||
|
for (i=0; i<Length; i++)
|
||||||
|
{
|
||||||
|
buf1[i] = Fill;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID RtlZeroMemory(PVOID Destination, ULONG Length)
|
||||||
|
{
|
||||||
|
RtlFillMemory(Destination, Length, 0);
|
||||||
|
}
|
121
freeldr/freeldr/rtl/print.c
Normal file
121
freeldr/freeldr/rtl/print.c
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
/*
|
||||||
|
* FreeLoader
|
||||||
|
* Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtl.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* print() - prints unformatted text to stdout
|
||||||
|
*/
|
||||||
|
void print(char *str)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0; i<strlen(str); i++)
|
||||||
|
putchar(str[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* printf() - prints formatted text to stdout
|
||||||
|
* from:
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 1996 Erich Boleyn <erich@uruk.org>
|
||||||
|
*/
|
||||||
|
void printf(char *format, ... )
|
||||||
|
{
|
||||||
|
int *dataptr = (int *) &format;
|
||||||
|
char c, *ptr, str[16];
|
||||||
|
|
||||||
|
dataptr++;
|
||||||
|
|
||||||
|
while ((c = *(format++)))
|
||||||
|
{
|
||||||
|
if (c != '%')
|
||||||
|
putchar(c);
|
||||||
|
else
|
||||||
|
switch (c = *(format++))
|
||||||
|
{
|
||||||
|
case 'd': case 'u': case 'x':
|
||||||
|
*convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
|
||||||
|
|
||||||
|
ptr = str;
|
||||||
|
|
||||||
|
while (*ptr)
|
||||||
|
putchar(*(ptr++));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c': putchar((*(dataptr++))&0xff); break;
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
ptr = (char *)(*(dataptr++));
|
||||||
|
|
||||||
|
while ((c = *(ptr++)))
|
||||||
|
putchar(c);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sprintf(char *buffer, char *format, ... )
|
||||||
|
{
|
||||||
|
int *dataptr = (int *) &format;
|
||||||
|
char c, *ptr, str[16];
|
||||||
|
char *p = buffer;
|
||||||
|
|
||||||
|
dataptr++;
|
||||||
|
|
||||||
|
while ((c = *(format++)))
|
||||||
|
{
|
||||||
|
if (c != '%')
|
||||||
|
{
|
||||||
|
*p = c;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
switch (c = *(format++))
|
||||||
|
{
|
||||||
|
case 'd': case 'u': case 'x':
|
||||||
|
*convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
|
||||||
|
|
||||||
|
ptr = str;
|
||||||
|
|
||||||
|
while (*ptr)
|
||||||
|
{
|
||||||
|
*p = *(ptr++);
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
*p = (*(dataptr++))&0xff;
|
||||||
|
p++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
ptr = (char *)(*(dataptr++));
|
||||||
|
|
||||||
|
while ((c = *(ptr++)))
|
||||||
|
{
|
||||||
|
*p = c;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*p=0;
|
||||||
|
}
|
135
freeldr/freeldr/rtl/stdlib.c
Normal file
135
freeldr/freeldr/rtl/stdlib.c
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
/*
|
||||||
|
* FreeLoader
|
||||||
|
* Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* convert_to_ascii() - converts a number to it's ascii equivalent
|
||||||
|
* from:
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 1996 Erich Boleyn <erich@uruk.org>
|
||||||
|
*/
|
||||||
|
char *convert_to_ascii(char *buf, int c, ...)
|
||||||
|
{
|
||||||
|
unsigned long num = *((&c) + 1), mult = 10;
|
||||||
|
char *ptr = buf;
|
||||||
|
|
||||||
|
if (c == 'x')
|
||||||
|
mult = 16;
|
||||||
|
|
||||||
|
if ((num & 0x80000000uL) && c == 'd')
|
||||||
|
{
|
||||||
|
num = (~num)+1;
|
||||||
|
*(ptr++) = '-';
|
||||||
|
buf++;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
int dig = num % mult;
|
||||||
|
*(ptr++) = ( (dig > 9) ? dig + 'a' - 10 : '0' + dig );
|
||||||
|
}
|
||||||
|
while (num /= mult);
|
||||||
|
|
||||||
|
/* reorder to correct direction!! */
|
||||||
|
{
|
||||||
|
char *ptr1 = ptr-1;
|
||||||
|
char *ptr2 = buf;
|
||||||
|
while (ptr1 > ptr2)
|
||||||
|
{
|
||||||
|
int c = *ptr1;
|
||||||
|
*ptr1 = *ptr2;
|
||||||
|
*ptr2 = c;
|
||||||
|
ptr1--;
|
||||||
|
ptr2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *itoa(int value, char *string, int radix)
|
||||||
|
{
|
||||||
|
if(radix == 16)
|
||||||
|
*convert_to_ascii(string, 'x', value) = 0;
|
||||||
|
else
|
||||||
|
*convert_to_ascii(string, 'd', value) = 0;
|
||||||
|
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
int toupper(int c)
|
||||||
|
{
|
||||||
|
if((c >= 'a') && (c <= 'z'))
|
||||||
|
c -= 32;
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tolower(int c)
|
||||||
|
{
|
||||||
|
if((c >= 'A') && (c <= 'Z'))
|
||||||
|
c += 32;
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
int atoi(char *string)
|
||||||
|
{
|
||||||
|
int base;
|
||||||
|
int result = 0;
|
||||||
|
char *str;
|
||||||
|
|
||||||
|
if((string[0] == '0') && (string[1] == 'x'))
|
||||||
|
{
|
||||||
|
base = 16;
|
||||||
|
str = string + 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
base = 10;
|
||||||
|
str = string;
|
||||||
|
}
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
if((*str < '0') || (*str > '9'))
|
||||||
|
break;
|
||||||
|
|
||||||
|
result *= base;
|
||||||
|
result += (*str - '0');
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int isspace(int c)
|
||||||
|
{
|
||||||
|
return(c == ' ' || (c >= 0x09 && c <= 0x0D));
|
||||||
|
}
|
||||||
|
|
||||||
|
int isdigit(int c)
|
||||||
|
{
|
||||||
|
return(c >= '0' && c <= '9');
|
||||||
|
}
|
||||||
|
|
||||||
|
int isxdigit(int c)
|
||||||
|
{
|
||||||
|
return((c >= '0' && c <= '9')||(c >= 'a' && c <= 'f')||(c >= 'A' && c <= 'F'));
|
||||||
|
}
|
152
freeldr/freeldr/rtl/string.c
Normal file
152
freeldr/freeldr/rtl/string.c
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
/*
|
||||||
|
* FreeLoader
|
||||||
|
* Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtl.h>
|
||||||
|
|
||||||
|
int strlen(char *str)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
for(len=0; str[len] != '\0'; len++);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *strcpy(char *dest, char *src)
|
||||||
|
{
|
||||||
|
char *ret = dest;
|
||||||
|
|
||||||
|
while(*src)
|
||||||
|
*dest++ = *src++;
|
||||||
|
*dest = 0;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *strncpy(char *dest, char *src, size_t count)
|
||||||
|
{
|
||||||
|
char *ret = dest;
|
||||||
|
|
||||||
|
while((*src) && (count--))
|
||||||
|
*dest++ = *src++;
|
||||||
|
*dest = 0;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *strcat(char *dest, char *src)
|
||||||
|
{
|
||||||
|
char *ret = dest;
|
||||||
|
|
||||||
|
while(*dest)
|
||||||
|
dest++;
|
||||||
|
|
||||||
|
while(*src)
|
||||||
|
*dest++ = *src++;
|
||||||
|
*dest = 0;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *strchr(const char *s, int c)
|
||||||
|
{
|
||||||
|
char cc = c;
|
||||||
|
while (*s)
|
||||||
|
{
|
||||||
|
if (*s == cc)
|
||||||
|
return (char *)s;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
if (cc == 0)
|
||||||
|
return (char *)s;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *strrchr(const char *s, int c)
|
||||||
|
{
|
||||||
|
char cc = c;
|
||||||
|
const char *sp=(char *)0;
|
||||||
|
while (*s)
|
||||||
|
{
|
||||||
|
if (*s == cc)
|
||||||
|
sp = s;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
if (cc == 0)
|
||||||
|
sp = s;
|
||||||
|
return (char *)sp;
|
||||||
|
}
|
||||||
|
|
||||||
|
int strcmp(const char *string1, const char *string2)
|
||||||
|
{
|
||||||
|
while(*string1 == *string2)
|
||||||
|
{
|
||||||
|
if(*string1 == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
string1++;
|
||||||
|
string2++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *(unsigned const char *)string1 - *(unsigned const char *)(string2);
|
||||||
|
}
|
||||||
|
|
||||||
|
int stricmp(const char *string1, const char *string2)
|
||||||
|
{
|
||||||
|
while(tolower(*string1) == tolower(*string2))
|
||||||
|
{
|
||||||
|
if(*string1 == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
string1++;
|
||||||
|
string2++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int)tolower(*string1) - (int)tolower(*string2);
|
||||||
|
}
|
||||||
|
|
||||||
|
int _strnicmp(const char *string1, const char *string2, size_t length)
|
||||||
|
{
|
||||||
|
if (length == 0)
|
||||||
|
return 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (toupper(*string1) != toupper(*string2++))
|
||||||
|
return toupper(*(unsigned const char *)string1) - toupper(*(unsigned const char *)--string2);
|
||||||
|
if (*string1++ == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
while (--length != 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int strncmp(const char *string1, const char *string2, size_t length)
|
||||||
|
{
|
||||||
|
if (length == 0)
|
||||||
|
return 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (*string1 != *string2++)
|
||||||
|
return *(unsigned const char *)string1 - *(unsigned const char *)--string2;
|
||||||
|
if (*string1++ == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
while (--length != 0);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -1,436 +0,0 @@
|
||||||
/*
|
|
||||||
* FreeLoader
|
|
||||||
* Copyright (C) 1999, 2000 Brian Palmer <brianp@sginet.com>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "freeldr.h"
|
|
||||||
#include "stdlib.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* print() - prints unformatted text to stdout
|
|
||||||
*/
|
|
||||||
void print(char *str)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for(i=0; i<strlen(str); i++)
|
|
||||||
putchar(str[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* convert_to_ascii() - converts a number to it's ascii equivalent
|
|
||||||
* from:
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 1996 Erich Boleyn <erich@uruk.org>
|
|
||||||
*/
|
|
||||||
char *convert_to_ascii(char *buf, int c, ...)
|
|
||||||
{
|
|
||||||
unsigned long num = *((&c) + 1), mult = 10;
|
|
||||||
char *ptr = buf;
|
|
||||||
|
|
||||||
if (c == 'x')
|
|
||||||
mult = 16;
|
|
||||||
|
|
||||||
if ((num & 0x80000000uL) && c == 'd')
|
|
||||||
{
|
|
||||||
num = (~num)+1;
|
|
||||||
*(ptr++) = '-';
|
|
||||||
buf++;
|
|
||||||
}
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
int dig = num % mult;
|
|
||||||
*(ptr++) = ( (dig > 9) ? dig + 'a' - 10 : '0' + dig );
|
|
||||||
}
|
|
||||||
while (num /= mult);
|
|
||||||
|
|
||||||
/* reorder to correct direction!! */
|
|
||||||
{
|
|
||||||
char *ptr1 = ptr-1;
|
|
||||||
char *ptr2 = buf;
|
|
||||||
while (ptr1 > ptr2)
|
|
||||||
{
|
|
||||||
int c = *ptr1;
|
|
||||||
*ptr1 = *ptr2;
|
|
||||||
*ptr2 = c;
|
|
||||||
ptr1--;
|
|
||||||
ptr2++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* printf() - prints formatted text to stdout
|
|
||||||
* from:
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 1996 Erich Boleyn <erich@uruk.org>
|
|
||||||
*/
|
|
||||||
void printf(char *format, ... )
|
|
||||||
{
|
|
||||||
int *dataptr = (int *) &format;
|
|
||||||
char c, *ptr, str[16];
|
|
||||||
|
|
||||||
dataptr++;
|
|
||||||
|
|
||||||
while ((c = *(format++)))
|
|
||||||
{
|
|
||||||
if (c != '%')
|
|
||||||
putchar(c);
|
|
||||||
else
|
|
||||||
switch (c = *(format++))
|
|
||||||
{
|
|
||||||
case 'd': case 'u': case 'x':
|
|
||||||
*convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
|
|
||||||
|
|
||||||
ptr = str;
|
|
||||||
|
|
||||||
while (*ptr)
|
|
||||||
putchar(*(ptr++));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'c': putchar((*(dataptr++))&0xff); break;
|
|
||||||
|
|
||||||
case 's':
|
|
||||||
ptr = (char *)(*(dataptr++));
|
|
||||||
|
|
||||||
while ((c = *(ptr++)))
|
|
||||||
putchar(c);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void sprintf(char *buffer, char *format, ... )
|
|
||||||
{
|
|
||||||
int *dataptr = (int *) &format;
|
|
||||||
char c, *ptr, str[16];
|
|
||||||
char *p = buffer;
|
|
||||||
|
|
||||||
dataptr++;
|
|
||||||
|
|
||||||
while ((c = *(format++)))
|
|
||||||
{
|
|
||||||
if (c != '%')
|
|
||||||
{
|
|
||||||
*p = c;
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
switch (c = *(format++))
|
|
||||||
{
|
|
||||||
case 'd': case 'u': case 'x':
|
|
||||||
*convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
|
|
||||||
|
|
||||||
ptr = str;
|
|
||||||
|
|
||||||
while (*ptr)
|
|
||||||
{
|
|
||||||
*p = *(ptr++);
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'c':
|
|
||||||
*p = (*(dataptr++))&0xff;
|
|
||||||
p++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 's':
|
|
||||||
ptr = (char *)(*(dataptr++));
|
|
||||||
|
|
||||||
while ((c = *(ptr++)))
|
|
||||||
{
|
|
||||||
*p = c;
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*p=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int strlen(char *str)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
|
|
||||||
for(len=0; str[len] != '\0'; len++);
|
|
||||||
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *itoa(int value, char *string, int radix)
|
|
||||||
{
|
|
||||||
if(radix == 16)
|
|
||||||
*convert_to_ascii(string, 'x', value) = 0;
|
|
||||||
else
|
|
||||||
*convert_to_ascii(string, 'd', value) = 0;
|
|
||||||
|
|
||||||
return string;
|
|
||||||
}
|
|
||||||
|
|
||||||
int toupper(int c)
|
|
||||||
{
|
|
||||||
if((c >= 'a') && (c <= 'z'))
|
|
||||||
c -= 32;
|
|
||||||
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
int tolower(int c)
|
|
||||||
{
|
|
||||||
if((c >= 'A') && (c <= 'Z'))
|
|
||||||
c += 32;
|
|
||||||
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
int memcmp(const void *buf1, const void *buf2, size_t count)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
const char *buffer1 = buf1;
|
|
||||||
const char *buffer2 = buf2;
|
|
||||||
|
|
||||||
for(i=0; i<count; i++)
|
|
||||||
{
|
|
||||||
if(buffer1[i] == buffer2[i])
|
|
||||||
continue;
|
|
||||||
else
|
|
||||||
return (buffer1[i] - buffer2[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *memcpy(void *dest, const void *src, size_t count)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
char *buf1 = dest;
|
|
||||||
const char *buf2 = src;
|
|
||||||
|
|
||||||
for(i=0; i<count; i++)
|
|
||||||
buf1[i] = buf2[i];
|
|
||||||
|
|
||||||
return dest;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *memset(void *dest, int c, size_t count)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
char *buf1 = dest;
|
|
||||||
|
|
||||||
for(i=0; i<count; i++)
|
|
||||||
buf1[i] = c;
|
|
||||||
|
|
||||||
return dest;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *strcpy(char *dest, char *src)
|
|
||||||
{
|
|
||||||
char *ret = dest;
|
|
||||||
|
|
||||||
while(*src)
|
|
||||||
*dest++ = *src++;
|
|
||||||
*dest = 0;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *strncpy(char *dest, char *src, size_t count)
|
|
||||||
{
|
|
||||||
char *ret = dest;
|
|
||||||
|
|
||||||
while((*src) && (count--))
|
|
||||||
*dest++ = *src++;
|
|
||||||
*dest = 0;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *strcat(char *dest, char *src)
|
|
||||||
{
|
|
||||||
char *ret = dest;
|
|
||||||
|
|
||||||
while(*dest)
|
|
||||||
dest++;
|
|
||||||
|
|
||||||
while(*src)
|
|
||||||
*dest++ = *src++;
|
|
||||||
*dest = 0;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *strchr(const char *s, int c)
|
|
||||||
{
|
|
||||||
char cc = c;
|
|
||||||
while (*s)
|
|
||||||
{
|
|
||||||
if (*s == cc)
|
|
||||||
return (char *)s;
|
|
||||||
s++;
|
|
||||||
}
|
|
||||||
if (cc == 0)
|
|
||||||
return (char *)s;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *strrchr(const char *s, int c)
|
|
||||||
{
|
|
||||||
char cc = c;
|
|
||||||
const char *sp=(char *)0;
|
|
||||||
while (*s)
|
|
||||||
{
|
|
||||||
if (*s == cc)
|
|
||||||
sp = s;
|
|
||||||
s++;
|
|
||||||
}
|
|
||||||
if (cc == 0)
|
|
||||||
sp = s;
|
|
||||||
return (char *)sp;
|
|
||||||
}
|
|
||||||
|
|
||||||
int strcmp(const char *string1, const char *string2)
|
|
||||||
{
|
|
||||||
while(*string1 == *string2)
|
|
||||||
{
|
|
||||||
if(*string1 == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
string1++;
|
|
||||||
string2++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return *(unsigned const char *)string1 - *(unsigned const char *)(string2);
|
|
||||||
}
|
|
||||||
|
|
||||||
int stricmp(const char *string1, const char *string2)
|
|
||||||
{
|
|
||||||
while(tolower(*string1) == tolower(*string2))
|
|
||||||
{
|
|
||||||
if(*string1 == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
string1++;
|
|
||||||
string2++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (int)tolower(*string1) - (int)tolower(*string2);
|
|
||||||
}
|
|
||||||
|
|
||||||
int _strnicmp(const char *string1, const char *string2, size_t length)
|
|
||||||
{
|
|
||||||
if (length == 0)
|
|
||||||
return 0;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (toupper(*string1) != toupper(*string2++))
|
|
||||||
return toupper(*(unsigned const char *)string1) - toupper(*(unsigned const char *)--string2);
|
|
||||||
if (*string1++ == 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
while (--length != 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int strncmp(const char *string1, const char *string2, size_t length)
|
|
||||||
{
|
|
||||||
if (length == 0)
|
|
||||||
return 0;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (*string1 != *string2++)
|
|
||||||
return *(unsigned const char *)string1 - *(unsigned const char *)--string2;
|
|
||||||
if (*string1++ == 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
while (--length != 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *fgets(char *string, int n, PFILE stream)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for(i=0; i<(n-1); i++)
|
|
||||||
{
|
|
||||||
if(IsEndOfFile(stream))
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ReadFile(stream, 1, NULL, string+i);
|
|
||||||
|
|
||||||
if(string[i] == '\n')
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
string[i] = '\0';
|
|
||||||
|
|
||||||
return string;
|
|
||||||
}
|
|
||||||
|
|
||||||
int atoi(char *string)
|
|
||||||
{
|
|
||||||
int base;
|
|
||||||
int result = 0;
|
|
||||||
char *str;
|
|
||||||
|
|
||||||
if((string[0] == '0') && (string[1] == 'x'))
|
|
||||||
{
|
|
||||||
base = 16;
|
|
||||||
str = string + 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
base = 10;
|
|
||||||
str = string;
|
|
||||||
}
|
|
||||||
|
|
||||||
while(1)
|
|
||||||
{
|
|
||||||
if((*str < '0') || (*str > '9'))
|
|
||||||
break;
|
|
||||||
|
|
||||||
result *= base;
|
|
||||||
result += (*str - '0');
|
|
||||||
str++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
int isspace(int c)
|
|
||||||
{
|
|
||||||
return(c == ' ' || (c >= 0x09 && c <= 0x0D));
|
|
||||||
}
|
|
||||||
|
|
||||||
int isdigit(int c)
|
|
||||||
{
|
|
||||||
return(c >= '0' && c <= '9');
|
|
||||||
}
|
|
||||||
|
|
||||||
int isxdigit(int c)
|
|
||||||
{
|
|
||||||
return((c >= '0' && c <= '9')||(c >= 'a' && c <= 'f')||(c >= 'A' && c <= 'F'));
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
/*
|
|
||||||
* FreeLoader
|
|
||||||
* Copyright (C) 1999, 2000 Brian Palmer <brianp@sginet.com>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __STDLIB_H
|
|
||||||
#define __STDLIB_H
|
|
||||||
|
|
||||||
#include "fs.h"
|
|
||||||
|
|
||||||
void putchar(int ch); // Implemented in asmcode.S
|
|
||||||
void clrscr(void); // Implemented in asmcode.S
|
|
||||||
int kbhit(void); // Implemented in asmcode.S
|
|
||||||
int getch(void); // Implemented in asmcode.S
|
|
||||||
void gotoxy(int x, int y); // Implemented in asmcode.S
|
|
||||||
int getyear(void); // Implemented in asmcode.S
|
|
||||||
int getday(void); // Implemented in asmcode.S
|
|
||||||
int getmonth(void); // Implemented in asmcode.S
|
|
||||||
int gethour(void); // Implemented in asmcode.S
|
|
||||||
int getminute(void); // Implemented in asmcode.S
|
|
||||||
int getsecond(void); // Implemented in asmcode.S
|
|
||||||
void hidecursor(void); // Implemented in asmcode.S
|
|
||||||
void showcursor(void); // Implemented in asmcode.S
|
|
||||||
int wherex(void); // Implemented in asmcode.S
|
|
||||||
int wherey(void); // Implemented in asmcode.S
|
|
||||||
|
|
||||||
int strlen(char *str);
|
|
||||||
char *strcpy(char *dest, char *src);
|
|
||||||
char *strncpy(char *dest, char *src, size_t count);
|
|
||||||
char *strcat(char *dest, char *src);
|
|
||||||
char *strchr(const char *s, int c);
|
|
||||||
char *strrchr(const char *s, int c);
|
|
||||||
int strcmp(const char *string1, const char *string2);
|
|
||||||
int stricmp(const char *string1, const char *string2);
|
|
||||||
int strncmp(const char *string1, const char *string2, size_t length);
|
|
||||||
int _strnicmp(const char *string1, const char *string2, size_t length);
|
|
||||||
char *itoa(int value, char *string, int radix);
|
|
||||||
int toupper(int c);
|
|
||||||
int tolower(int c);
|
|
||||||
int memcmp(const void *buf1, const void *buf2, size_t count);
|
|
||||||
void *memcpy(void *dest, const void *src, size_t count);
|
|
||||||
void *memset(void *dest, int c, size_t count);
|
|
||||||
char *fgets(char *string, int n, PFILE stream);
|
|
||||||
int atoi(char *string);
|
|
||||||
|
|
||||||
#define ZeroMemory(Destination, Length) memset(Destination, 0, Length)
|
|
||||||
|
|
||||||
int isspace(int c);
|
|
||||||
int isdigit(int c);
|
|
||||||
int isxdigit(int c);
|
|
||||||
|
|
||||||
|
|
||||||
void print(char *str);
|
|
||||||
void printf(char *fmt, ...);
|
|
||||||
void sprintf(char *buffer, char *format, ...);
|
|
||||||
|
|
||||||
char *convert_to_ascii(char *buf, int c, ...);
|
|
||||||
|
|
||||||
int biosdisk(int cmd, int drive, int head, int track, int sector, int nsects, void *buffer); // Implemented in asmcode.S
|
|
||||||
|
|
||||||
BOOL BiosInt13Read(ULONG Drive, ULONG Head, ULONG Track, ULONG Sector, ULONG SectorCount, PVOID Buffer); // Implemented in asmcode.S
|
|
||||||
BOOL BiosInt13ReadExtended(ULONG Drive, ULONG Sector, ULONG SectorCount, PVOID Buffer); // Implemented in asmcode.S
|
|
||||||
BOOL BiosInt13ExtensionsSupported(ULONG Drive);
|
|
||||||
|
|
||||||
void stop_floppy(void); // Implemented in asmcode.S
|
|
||||||
int get_heads(int drive); // Implemented in asmcode.S
|
|
||||||
int get_cylinders(int drive); // Implemented in asmcode.S
|
|
||||||
int get_sectors(int drive); // Implemented in asmcode.S
|
|
||||||
|
|
||||||
#ifndef max
|
|
||||||
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef min
|
|
||||||
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif // defined __STDLIB_H
|
|
|
@ -143,4 +143,13 @@ void DrawProgressBar(int nPos);
|
||||||
#define KEY_F9 0x43
|
#define KEY_F9 0x43
|
||||||
#define KEY_F10 0x44
|
#define KEY_F10 0x44
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Menu Functions
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
BOOL DisplayMenu(PUCHAR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, PULONG SelectedMenuItem);
|
||||||
|
|
||||||
|
|
||||||
#endif // #defined __TUI_H
|
#endif // #defined __TUI_H
|
46
freeldr/freeldr/ui/Makefile
Normal file
46
freeldr/freeldr/ui/Makefile
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#
|
||||||
|
# FreeLoader
|
||||||
|
# Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
export CC = gcc
|
||||||
|
export LD = ld
|
||||||
|
export AR = ar
|
||||||
|
export RM = cmd /C del
|
||||||
|
export CP = cmd /C copy
|
||||||
|
|
||||||
|
FLAGS = -Wall -fno-builtin -I../ -DDEBUG -O3
|
||||||
|
|
||||||
|
OBJS = tui.o menu.o
|
||||||
|
|
||||||
|
.PHONY : clean
|
||||||
|
|
||||||
|
all: ui.a
|
||||||
|
|
||||||
|
ui.a: $(OBJS)
|
||||||
|
$(LD) -r -o ui.a $(OBJS)
|
||||||
|
|
||||||
|
tui.o: tui.c ../ui.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o tui.o -c tui.c
|
||||||
|
|
||||||
|
menu.o: menu.c ../ui.h Makefile
|
||||||
|
$(CC) $(FLAGS) -o menu.o -c menu.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o
|
||||||
|
$(RM) *.a
|
|
@ -17,12 +17,11 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "stdlib.h"
|
#include <rtl.h>
|
||||||
#include "tui.h"
|
#include <ui.h>
|
||||||
#include "menu.h"
|
#include <options.h>
|
||||||
#include "options.h"
|
#include <mm.h>
|
||||||
#include "memory.h"
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
|
@ -17,12 +17,12 @@
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "freeldr.h"
|
#include <freeldr.h>
|
||||||
#include "stdlib.h"
|
#include <rtl.h>
|
||||||
#include "tui.h"
|
#include <ui.h>
|
||||||
#include "memory.h"
|
#include <mm.h>
|
||||||
#include "debug.h"
|
#include <debug.h>
|
||||||
#include "parseini.h"
|
#include <parseini.h>
|
||||||
|
|
||||||
ULONG nScreenWidth = 80; // Screen Width
|
ULONG nScreenWidth = 80; // Screen Width
|
||||||
ULONG nScreenHeight = 25; // Screen Height
|
ULONG nScreenHeight = 25; // Screen Height
|
Loading…
Reference in a new issue