// 
// external declarations and manifests for Redraw
// Copyright 1980 Bruce D. Lucas
//

external [

    FLDI		// load immediate
    FTR			// truncate
    FLD			// load
    FST			// store
    FSB			// subtract
    FAD			// add
    FMP			// multiply
    FDV			// divide
    FNEG		// negate
    FSN			// sign
    FCM			// compare
    FSTV		// store as vector
    FLDV		// load as vector

    ParametricSpline
    ArrowsMicaAdjust    // the Ramshaw arrow adjuster

    LoadRam
    MicroFloatRamImage
    PSzone
    sysZone
    FPSetup

    InitFloat
    UserCmGet
    ParseFontFileName
    Abort
    WaitForKey
    DoDrawFile

    // various globals communication among
    // redraw, init, and drawfile
    OptFlag
    VerboseFlag
    QuietFlag
    ColorFlag
    ScribeFlag
    MergeFlag
    MAXKNOTS
    UNITTabSize
    FONTTabSize
    MinDelta
    MaxDelta
    DashOn
    DashOff
    UserX
    UserY
    p0x; p0y
    p1x; p1y
    p2x; p2y
    p3x; p3y
    BrushTable
    TextTable


    GetFixed
    OpenFile
    Closes
    OsFinish
    Wss
    dsp
    Gets
    keys
    PrintFloat
    PutTemplate
    ReadBlock
    SetupReadParam
    ReadParam
    EvalParam
    ReadString
    SearchString
    ExtractString
    AppendString
    CopyString
    StringToValue
    StringEqual
    SearchChar
    ReadUserCmItem
]

manifest [

    ROUNDBRUSH = 0	// draw brush shape codes
    SQUAREBRUSH = 1
    HORIZBRUSH = 2
    VERTBRUSH = 3

    SCANSperIN = 384	// Dover scan lines per inch
    MICASperIN = 2540	// micas per inch
    MICASperALTO = 32   // micas per Alto dot
    PageCenterX = (SCANSperIN*8+SCANSperIN/2)/2
    PageCenterY = (SCANSperIN*11)/2

    NumAcs = 40		// a nice even number of fp acs

    // fp ac assignments
    XTPOLY = 1		// 1, 2, 3, 4 for coefficients of x(t)
    YTPOLY = 5		// 5, 6, 7, 8 for coefficients of y(t)
    XPTPOLY = 9		// 9, 10, 11 for coefficients of x'(t)
    YPTPOLY = 12	// 12, 13, 14 for coeffiecients of y'(t)
    XT = 15		// current x(t)
    YT = 16		// current y(t)
    XPT = 17		// current x'(t)
    YPT = 18		// current y'(t)
    T = 19		// current T
    NEWT = 20		// t for next iteration, if acceptable
    NEWXT = 21		// x(t)  "
    NEWYT = 22		// y(t)  "
    XWALLDT = 23	// DT if use x (vertical) walls of square
    YWALLDT = 24	// DT if use y (horizontal) walls
    XDIFF = 25		// x difference btw ix and NEWXT
    YDIFF = 26		// y difference btw iy and NEWYT
    MINDIFF = 27	// closest (ix,iy) should get to (NEWXT,NEWYT)
    MAXDIFF = 28	// furthest (ix,iy) should get to (NEWXT,NEWYT)
    TEMP = 29		// temporary ac
    TEMPOTHER = 30	// another temporary ac
    KEpsilon = 31	// Epsilon to replace x' or y' if 0
    KAltoDover = 33	// konstant dover scans per alto dot
    KOne = 34		// konstant 1.0
    KTwo = 35		// konstant 2.0
    KSix = 36		// konstant 6.0
    KHalf = 37 		// konstant 0.5
]

structure STRING↑0,255 [
    data byte
]

structure FLOAT [
    sign bit 1
    expon bit 8
    mantissa1 bit 7
    mantissa2 bit 16
]
    
structure FONTS↑0,3 [	// storage for text and vector font descriptions
    ALFileName↑0,29 byte
    Baseline word
    Family↑0,19 byte
    Face word
    Size word
]

structure LIST↑1,2 [	// list of floating point nums: p0x, etc.
    @FLOAT
]