24.01.2014 Views

Codice

Codice

Codice

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

182 volume VI os16<br />

Script e sorgenti del kernel 183<br />

30033 | for c in *.c<br />

30034 | do<br />

30035 | if [ -f $c ]<br />

30036 | then<br />

30037 | C=‘basename $c .c‘<br />

30038 | SOURCE_C="$SOURCE_C $C"<br />

30039 | fi<br />

30040 | done<br />

30041 | #<br />

30042 | # Trova i file in ASM.<br />

30043 | #<br />

30044 | for s in *.s<br />

30045 | do<br />

30046 | if [ -f $s ]<br />

30047 | then<br />

30048 | S=‘basename $s .s‘<br />

30049 | SOURCE_S="$SOURCE_S $S"<br />

30050 | fi<br />

30051 | done<br />

30052 | #<br />

30053 | # Prepara il file make.<br />

30054 | # GCC viene usato per potenziare il controllo degli errori.<br />

30055 | #<br />

30056 | echo -n > $MAKEFILE<br />

30057 | echo "# This file was made automatically" >> $MAKEFILE<br />

30058 | echo "# by the script \‘makeit\’, based on the" >> $MAKEFILE<br />

30059 | echo "# directory content." >> $MAKEFILE<br />

30060 | echo "# Please use \‘makeit\’ to compile and" >> $MAKEFILE<br />

30061 | echo "# \‘makeit clean\’ to clean directories." >> $MAKEFILE<br />

30062 | echo "#" >> $MAKEFILE<br />

30063 | echo "c = $SOURCE_C" >> $MAKEFILE<br />

30064 | echo "#" >> $MAKEFILE<br />

30065 | echo "s = $SOURCE_S" >> $MAKEFILE<br />

30066 | echo "#" >> $MAKEFILE<br />

30067 | echo "all: \$(s) \$(c)" >> $MAKEFILE<br />

30068 | echo "#" >> $MAKEFILE<br />

30069 | echo "clean:" >> $MAKEFILE<br />

30070 | echo "${TAB}@rm \$(c) \$(s) *.o *.assembler 2> /dev/null ; true" \<br />

30071 | >> $MAKEFILE<br />

30072 | echo "${TAB}@rm *.symbols 2> /dev/null ; true" >> $MAKEFILE<br />

30073 | echo "${TAB}@pwd" >> $MAKEFILE<br />

30074 | echo "#" >> $MAKEFILE<br />

30075 | echo "\$(c):" >> $MAKEFILE<br />

30076 | echo "${TAB}@echo \$@.c" >> $MAKEFILE<br />

30077 | echo "${TAB}@gcc -Wall -c -o \$@.o " \<br />

30078 | "-I " \<br />

30079 | "-I. " \<br />

30080 | "-I$OS16PATH/lib " \<br />

30081 | "-I$OS16PATH/ " \<br />

30082 | "\$@.c" >> $MAKEFILE<br />

30083 | echo "${TAB}@rm \$@.o" >> $MAKEFILE<br />

30084 | echo "${TAB}@bcc -ansi -0 -Mc -S -o \$@.assembler " \<br />

30085 | "-I " \<br />

30086 | "-I. " \<br />

30087 | "-I$OS16PATH/lib " \<br />

30088 | "-I$OS16PATH/ " \<br />

30089 | "\$@.c" >> $MAKEFILE<br />

30090 | echo "${TAB}@bcc -ansi -0 -Mc -c -o \$@.o " \<br />

30091 | "-I " \<br />

30092 | "-I. " \<br />

30093 | "-I$OS16PATH/lib " \<br />

30094 | "-I$OS16PATH/ " \<br />

30095 | "\$@.c" >> $MAKEFILE<br />

30096 | echo "#" >> $MAKEFILE<br />

30097 | echo "\$(s):" >> $MAKEFILE<br />

30098 | echo "${TAB}@echo \$@.s" >> $MAKEFILE<br />

30099 | echo "${TAB}@as86 -u -0 -o \$@.o -s \$@.symbols \$@.s" >> $MAKEFILE<br />

30100 | #<br />

30101 |}<br />

30102 |#<br />

30103 |#<br />

30104 |#<br />

30105 |main () {<br />

30106 | #<br />

30107 | local CURDIR=‘pwd‘<br />

30108 | local OBJECTS<br />

30109 | local OBJLIB<br />

30110 | local EXEC<br />

30111 | local BASENAME<br />

30112 | local PROGNAME<br />

30113 | local d<br />

30114 | local c<br />

30115 | local s<br />

30116 | local o<br />

30117 | #<br />

30118 | edition<br />

30119 | #<br />

30120 | # Copia dello scheletro<br />

30121 | #<br />

30122 | if [ "$OPTION" = "clean" ]<br />

30123 | then<br />

30124 | #<br />

30125 | # La copia non va fatta.<br />

30126 | #<br />

30127 | true<br />

30128 | else<br />

30129 | cp -dpRv skel/etc /mnt/os16.a/<br />

30130 | cp -dpRv skel/dev /mnt/os16.a/<br />

30131 | mkdir /mnt/os16.a/mnt/<br />

30132 | mkdir /mnt/os16.a/tmp/<br />

30133 | chmod 0777 /mnt/os16.a/tmp/<br />

30134 | mkdir /mnt/os16.a/usr/<br />

30135 | cp -dpRv skel/root /mnt/os16.a/<br />

30136 | cp -dpRv skel/home /mnt/os16.a/<br />

30137 | cp -dpRv skel/usr/* /mnt/os16.b/<br />

30138 | fi<br />

30139 | #<br />

30140 | #<br />

30141 | #<br />

30142 | for d in ‘find kernel‘ \<br />

30143 | ‘find lib‘ \<br />

30144 | ‘find applic‘ \<br />

30145 | ‘find ported‘<br />

30146 | do<br />

30147 | if [ -d "$d" ]<br />

30148 | then<br />

30149 | #<br />

30150 | # Sono presenti dei file C o ASM?<br />

30151 | #<br />

30152 | c=‘echo $d/*.c | sed "s/ .*//"‘<br />

30153 | s=‘echo $d/*.s | sed "s/ .*//"‘<br />

30154 | #<br />

30155 | if [ -f "$c" ] || [ -f "$s" ]<br />

30156 | then<br />

30157 | #<br />

30158 | # Sì<br />

30159 | #<br />

30160 | CURDIR=‘pwd‘<br />

30161 | cd $d<br />

30162 | #<br />

30163 | # Ricrea il file make<br />

30164 | #<br />

30165 | makefile<br />

30166 | #<br />

30167 | # Pulisce quindi la directory<br />

30168 | #<br />

30169 | make clean<br />

30170 | #<br />

30171 | #<br />

30172 | #<br />

30173 | if [ "$OPTION" = "clean" ]<br />

30174 | then<br />

30175 | #<br />

30176 | # È stata richiesta la pulitura, ma questa<br />

30177 | # è appena stata fatta!<br />

30178 | #<br />

30179 | true<br />

30180 | else<br />

30181 | #<br />

30182 | # Qualunque altro argomento viene considerato<br />

30183 | # un ‘make’.<br />

30184 | #<br />

30185 | if ! make<br />

30186 | then<br />

30187 | #<br />

30188 | # La compilazione è fallita.<br />

30189 | #<br />

30190 | cd "$CURDIR"<br />

30191 | exit<br />

30192 | fi<br />

30193 | fi<br />

30194 | cd "$CURDIR"<br />

30195 | fi<br />

30196 | fi<br />

30197 | done<br />

30198 | #<br />

30199 | cd "$CURDIR"<br />

30200 | #<br />

30201 | # Link<br />

30202 | #<br />

30203 | if [ "$OPTION" = "clean" ]<br />

30204 | then<br />

30205 | #<br />

30206 | # Il collegamento non va fatto.<br />

30207 | #<br />

30208 | true<br />

30209 | else<br />

30210 | #<br />

30211 | # Collegamento dei file del kernel.<br />

30212 | #<br />

30213 | OBJECTS=""<br />

30214 | #<br />

30215 | for o in ‘find kernel -name \*.o -print‘ \<br />

30216 | ‘find lib -name \*.o -print‘<br />

30217 | do<br />

30218 | if [ "$o" = "./kernel/main/crt0.o" ] \<br />

30219 | || [ "$o" = "./kernel/main/main.o" ] \<br />

30220 | || [ ! -e "$o" ]<br />

30221 | then<br />

30222 | true<br />

30223 | else<br />

30224 | OBJECTS="$OBJECTS $o"<br />

30225 | fi<br />

30226 | done<br />

30227 | #<br />

30228 | echo "Link"<br />

30229 | #<br />

30230 | ld86 -i -d -s -m -o kimage \<br />

30231 | kernel/main/crt0.o \<br />

30232 | kernel/main/main.o \<br />

30233 | $OBJECTS<br />

30234 | #<br />

30235 | # Copia il kernel nel dischetto.<br />

30236 | #<br />

30237 | if mount | grep /mnt/os16.a > /dev/null<br />

30238 | then<br />

30239 | cp -f kimage /mnt/os16.a/boot<br />

30240 | else<br />

30241 | echo "[$0] Cannot copy the kernel image "<br />

30242 | echo "[$0] inside the floppy disk image!"<br />

30243 | fi<br />

30244 | sync<br />

30245 | #<br />

30246 | # Collegamento delle applicazioni di os16.<br />

30247 | #<br />

30248 | OBJLIB=""<br />

30249 | #<br />

30250 | for o in ‘find lib -name \*.o -print‘<br />

30251 | do<br />

30252 | OBJLIB="$OBJLIB $o"<br />

30253 | done<br />

30254 | #<br />

30255 | # Scansione delle applicazioni interne.<br />

30256 | #<br />

30257 | for o in ‘find applic -name \*.o -print‘<br />

30258 | do<br />

30259 | if [ "$o" = "applic/crt0.o" ] \<br />

30260 | || [ ! -e "$o" ] \<br />

30261 | || echo "$o" | grep ".crt0.o$" > /dev/null<br />

30262 | then<br />

30263 | #<br />

30264 | # Il file non esiste oppure si tratta di ‘...crt0.s’.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!