EXTERNALROUTINE WHATPAGE(STRING (63)S) EXTERNALROUTINESPEC PROMPT(STRING (15)S) EXTERNALROUTINESPEC UCSTRG(STRINGNAME S) EXTERNALROUTINESPEC RDINT(INTEGERNAME I) SYSTEMSTRINGFNSPEC ITOS(INTEGER N) CONSTINTEGER PROP LENGTH=5*40 CONSTINTEGERARRAY PROPERTIES(0:PROP LENGTH//4-1)=C 19,404,3,4096,23028,40,256,344,4,20, C { EDS100 } 19,808,3,4096,46056,40,256,344,4,20, C { EDS200 } 5,808,4,4096,16160,40,256,344,4,6, C { EDS80 } 10,816,9,4096,36720,40,256,344,4,6, C { FDS160 } 40,830,9,4096,149400,40,256,344,4,6 { FDS640 } !* !* FDS devices have 4.5 pages per track formatted thus:- !* !* Even numbered tracks - 4K 4K 4K 4K 2K !* Odd numbered - 2K 4K 4K 4K 4K !* !* So that _PPERTRK (currently 9) is the number of pages in an even/odd !* track pair !* RECORDFORMAT PROPFORM(INTEGER TRACKS,CYLS,PPERTRK,X1,X2,X3,X4,X5,X6,X7) RECORD (PROPFORM)NAME PROP CONSTINTEGER SPFORMAT=3 CONSTINTEGER HI DTYPE=4 CONSTSTRING (6)ARRAY DTYPES(0:HIDTYPE)="EDS100","EDS200","EDS80","FDS160","FDS640" STRING (6) DTYPE INTEGER PPTR,CYL,TRACK,SECTOR,PAGE !* MORE: PROMPT("Disc type? : ") UCSTRG(DTYPE) FOR PPTR=0,1,HI DTYPE CYCLE ->FOUND IF DTYPE->(DTYPES(PPTR)) REPEAT PRINTSTRING("Must be one of the following:- ") FOR PPTR=0,1,HI DTYPE CYCLE PRINTSTRING(DTYPES(PPTR)) NEWLINE REPEAT ->MORE FOUND: PROP==RECORD(ADDR(PROPERTIES(PPTR*SIZE OF(PROP)//4))) CYLP: PROMPT("Cyl? : ") RDINT(CYL) ->CYLP UNLESS 0<=CYL<PROP_CYLS TRACKP: PROMPT("Track? : ") RDINT(TRACK) ->TRACKP UNLESS 0<=TRACK<PROP_TRACKS SECTP: PROMPT("Sector? : ") RDINT(SECTOR) ->SECTP UNLESS 0<SECTOR<=PROP_PPERTRK ->SECTP IF PPTR>=SPFORMAT AND SECTOR>PROP_PPERTRK//2+1 PAGE=CYL*PROP_TRACKS*PROP_PPERTRK+TRACK*PROP_PPERTRK IF PPTR>=SPFORMAT THEN PAGE=PAGE//2 PAGE=PAGE+SECTOR-1 PRINTSTRING("Cyl/track/sector ". C ITOS(CYL)."/".ITOS(TRACK)."/".ITOS(SECTOR). C " on an ".DTYPE." is page ".ITOS(PAGE)." ") END ENDOFFILE