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