' *** DISKNUMB.LST *** 2nd GFA-Manual, page 11-21 > PROCEDURE disk_number(drive$,VAR ok!) ' ' *** Change serial-number of disk in drive$ ("A" or "B") ' *** Probably not a good idea if the disk is IBM-compatible (not checked) ' *** Don't use this Procedure if the bootsector is executable (not checked!) ' LOCAL buffer%,drive,e,ser%,serial%,sum%,i,check,m$,k INLINE buffer%,512 drive=ASC(UPPER$(drive$))-65 ! 0 = drive A, 1 = drive B ~FSFIRST(drive$+":\@@$$%%&&",17) ! force media-change e=BIOS(4,0,L:buffer%,1,0,drive) ! load bootsector IF e<>0 m$=" *** Error ***|Bootsector of disk in drive "+drive$+"|was not " m$=m$+"loaded by Procedure |Disk_number" ALERT 3,m$,1,"Sorry",k ok!=FALSE ELSE ok!=TRUE ENDIF IF ok! ser%=SHR(LONG{buffer%+8},8) ! current serial number REPEAT serial%=RANDOM(&H1000000) ! new serial number (&H0 - &HFFFFFF) UNTIL serial%<>ser% WORD{buffer%+8}=(serial% DIV 256) AND &HFFFF ! byte 2 and 1 BYTE{buffer%+10}=serial% AND &HFF ! byte 0 sum%=0 FOR i=0 TO 255 ADD sum%,CARD{ADD(buffer%,MUL(i,2))} ! calculate checksum NEXT i sum%=sum% AND &HFFFF IF sum%=&H1234 ! oops, executable bootsector check=BYTE{buffer%+511} ! low byte of CHKSUM IF check>0 DEC check ELSE INC check ! just in case check=0 ENDIF BYTE{buffer%+511}=check ! not executable anymore ENDIF ~FSFIRST(drive$+":\@@$$%%&&",17) ! force media-change e=BIOS(4,1,L:buffer%,1,0,drive) ! save bootsector IF e<>0 m$=" *** Error ***|Bootsector of disk in drive "+drive$+"|was not " m$=m$+"saved by Procedure |Disk_number" ALERT 3,m$,1,"Sorry",k ok!=FALSE ENDIF ENDIF ~FSFIRST(drive$+":\@@$$%%&&",17) ! force media-change IF ok! m$="The serial number of the disk|in drive "+drive$+" is changed from" m$=m$+"|&H"+HEX$(ser%,6)+" into &H"+HEX$(serial%,6) ALERT 1,m$,1," Ok ",k ELSE m$="The serial number of |the disk in drive "+drive$+"|could not be changed" ALERT 1,m$,1,"Sorry",k ENDIF RETURN ' ******* '