#sccs "@(#)fndetc/convert:masterconvert 1.7" # # FILE: masterconvert # # This program splits the new and old master files into # their four major sections. For each section, any lines # missing from the old are added to the new. Then the # new pieces are put back together. # if [ $# -lt 2 ] then echo "usage: masterconvert {old file} {new file}" exit fi OLDFILE=$1 NEWFILE=$2 if [ $# -eq 3 ] then VERBOSE=$3 else VERBOSE="" fi # First split the old and new master files. splitmaster $OLDFILE /tmp/mOLD splitmaster $NEWFILE /tmp/mNEW # Next, extract the missing parts from the old pieces and # add them to the new master file. for I in 1 2 do ## GET THE LIST OF MISSING DEVICE ENTRIES diff /tmp/mOLD$I /tmp/mNEW$I | getmissing - > /tmp/missing cp /tmp/missing /tmp/checklist while read NAME JUNK do if [ "$NAME" = "*" ] then grep -v "^$NAME" /tmp/missing > /tmp/tmplist mv /tmp/tmplist /tmp/missing continue fi if grep "^$NAME" /tmp/mNEW$I > /dev/null then grep -v "^$NAME" /tmp/missing > /tmp/tmplist mv /tmp/tmplist /tmp/missing fi done < /tmp/checklist ## FOR EACH MISSING DEVICE, REMOVE ITS OLD /dev FILES, ## ADD THE ENTRY TO THE NEW MASTER FILE, THEN RECREATE ## ITS /dev FILES. while read NAME DEVMASK DEVTYPE HANDLER JUNK1 JUNK do ## CHECK THE MASTER VERSION vs 3.31 NEWMSTR=`expr "$HANDLER" : '[0-9]'` if [ "$NEWMSTR" = "1" ] then DEVTYPE="$HANDLER" HANDLER="$JUNK1" fi ## ADD THE DEVICE TO THE MASTER FILE ADD=`expanddesc $DEVMASK $DEVTYPE` if [ "$NAME" != "$HANDLER" ] then ADD="-p $HANDLER $ADD" fi masterupd -a -m $NEWFILE $ADD $NAME ## GET THE OLD AND NEW DEVICE NUMBERS rm -f /tmp/charflag /tmp/blockflag echo "$ADD" | grep "char" > /tmp/charflag echo "$ADD" | grep "block" > /tmp/blockflag fBLOCK=false fCHAR=false OLDNUM="" if [ -s /tmp/charflag ] then fCHAR=true OLDNUM=`$SAVEDIR/masterupd -c -m $OLDFILE $NAME` NEWNUM=`masterupd -c -m $NEWFILE $NAME` rm -f /tmp/charflag elif [ -s /tmp/blockflag ] then fBLOCK=true OLDNUM=`$SAVEDIR/masterupd -b -m $OLDFILE $NAME` NEWNUM=`masterupd -b -m $NEWFILE $NAME` rm -f /tmp/blockflag fi ## BUILD LIST OF ASSOCIATED DEVICE FILES if [ "$OLDNUM" ] then find /dev/* -print | grep -v "/dev/console" | \ getdevices $OLDNUM > /tmp/devlist else > /tmp/devlist fi ## CONVERT DEVICE FILES FROM OLD TO NEW NUMBER while read FILE MINOR do rm -f $FILE if $fCHAR then mknod $FILE c $NEWNUM $MINOR elif $fBLOCK then mknod $FILE b $NEWNUM $MINOR fi done < /tmp/devlist done < /tmp/missing # Do listing update as necessary. if [ "$VERBOSE" ] then echo "new master file updated with:" cat /tmp/missing echo fi done # Clean up scratch files created. rm -f /tmp/mOLD? /tmp/mNEW? rm -f /tmp/missing /tmp/checklist /tmp/tmplist /tmp/devlist