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