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’.