(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "21-May-87 09:52:00" {DANTE}<RCLARKE>LYRIC>MICROTEK.;16 91841  

      changes to%:  (VARS MICROTEKCOMS)
                    (FNS MT.INIT MT.DISPLAY.MENU MT.BITMAPCREATE MT.CONVERTIMAGETOBM)

      previous date%: "20-May-87 11:22:08" {DANTE}<RCLARKE>LYRIC>MICROTEK.;15)


(* "
Copyright (c) 1987 by XEROX Corporation.  All rights reserved.
")

(PRETTYCOMPRINT MICROTEKCOMS)

(RPAQQ MICROTEKCOMS 
       ((P (FILESLOAD DLRS232C EDITBITMAP))
        (* * Microtek Initialization and Menu Functions)
        (FNS MT.INIT MT.SHRINKFN MICROTEKSCANNER RULERX RULEX# RULERY RULEY# MT.GETLENGTH 
             MT.CURSOR.IN MT.CURSOR.OUT MT.PRINT.STATUS MT.CONTROL.MENU MT.CHANGE.BRIGHTBAR 
             MT.RAISEBRIGHTNESS MT.LOWERBRIGHTNESS MT.CHANGE.CONTRASTBAR MT.RAISECONTRAST 
             MT.LOWERCONTRAST MT.SELECT.BACKGROUND MT.GETTRANSFRAME MT.GETWINDOW1 MT.GETWINDOW2 
             MT.GETWINDOW3 MT.GETWINDOW4 MT.UPDATE.HTWINDOWS MT.DRAWAREABOX)
        (* * Command Functions)
        (FNS MT.COMMAND.MENU MT.GET.OUTFILENAME MT.SCAN MT.START.SCANNING MT.SETUPSCANFILE 
             MT.SEND.SCAN.PARAMETERS MT.SENDCOMMAND MT.COMPUTECHECKSUM MT.PRINT.ERROR.MSG MT.SENDACK 
             MT.SENDNAK MT.STOP.SCANNING MT.RESET MT.PAGEMAP MT.QUIT)
        (* * Functions to convert and print scanned images)
        (FNS MT.DISPLAY.MENU MT.GET.SOURCEFILENAME MT.GET.BITMAPNAME MT.CREATEBM MT.BITMAPCREATE 
             MT.CONVERTIMAGETOBM MT.CREATE.BIG.BM MT.CREATE.DISPLAYWINDOW MT.REPAINTWINDOW 
             MT.RESHAPEWINDOW)
        (ADDVARS (BackgroundMenuCommands ("MicrotekScanner" (MT.INIT)
                                                "Open Microtek Scanner Command and Display windows, initilalize RS232 port and verifies Microtek Scanner is ready"
                                                )))
        (VARS (BackgroundMenu NIL))
        (VARS MT.ICON MT.ICON.MASK BRIGHTBAR CONTRASTBAR INITIALBRIGHTBAR INITIALCONTRASTBAR 
              LEFTARROW MANCURSOR RIGHTARROW MT.POINTER)
        (INITVARS (MT.BAUDRATE 19200)
               (MT.RS232C.FRAME.TIMEOUT 2)
               (MT.DISPLAYFRAME 'YES)
               (MT.PAPERLENGTH 4)
               (MT.REDUCTION 0)
               (MT.CONTRAST 0)
               (MT.BRIGHTNESS 0)
               (MT.GREYLEVEL 0)
               (MT.DATACOMPRESSION 'NO)
               (MT.BACKGROUND 'HALFTONE)
               (MT.WINDOW 'LINEART)
               (MT.FRAME '(0 0 40 24))
               (MT.FRAME.BOX '(0 460 200 120))
               (MT.TEXTW1 '(0 0 0 0))
               (MT.TEXTW2 '(0 0 0 0))
               (MT.TEXTW3 '(0 0 0 0))
               (MT.TEXTW4 '(0 0 0 0))
               (MT.TEXTW1BOX '(0 0 0 0))
               (MT.TEXTW2BOX '(0 0 0 0))
               (MT.TEXTW3BOX '(0 0 0 0))
               (MT.TEXTW4BOX '(0 0 0 0))
               (MT.HALFTONEW1 '(0 0 0 0))
               (MT.HALFTONEW2 '(0 0 0 0))
               (MT.HALFTONEW3 '(0 0 0 0))
               (MT.HALFTONEW4 '(0 0 0 0))
               (MT.HALFTONEW1BOX '(0 0 0 0))
               (MT.HALFTONEW2BOX '(0 0 0 0))
               (MT.HALFTONEW3BOX '(0 0 0 0))
               (MT.HALFTONEW4BOX '(0 0 0 0))
               (MT.OUTSTREAM NIL)
               (MT.INSTREAM NIL)
               (MT.BMSHRINKFACTOR 1))
        (GLOBALVARS MT.RS232C.FRAME.TIMEOUT MT.STATUSWINDOW MT.HEIGHTRULER MT.GRID MT.PAPERLENGTH 
               MT.REDUCTION MT.BRIGHTNESS MT.CONTRAST MT.GREYLEVEL MT.DATACOMPRESSION MT.BACKGROUND 
               MT.WINDOW MT.HEIGHTWINDOW MT.FRAME MT.FRAME.BOX MT.TEXTW1 MT.TEXTW2 MT.TEXTW3 
               MT.TEXTW4 MT.HALFTONEW1 MT.HALFTONEW2 MT.HALFTONEW3 MT.HALFTONEW4 MT.OUTSTREAM 
               MT.INSTREAM BRIGHTBAR CONTRASTBAR LEFTARROW MANCURSOR RIGHTARROW)
        (PROP MAKEFILE-ENVIRONMENT MICROTEK)))
(FILESLOAD DLRS232C EDITBITMAP)
(* * Microtek Initialization and Menu Functions)

(DEFINEQ

(MT.INIT
  [LAMBDA NIL                                     (* ; 
                                                 "Edited 21-May-87 09:41 by ronald clarke:xsis:xerox")
                                                             (* ; "Edited 20-May-87 11:20 by ")

    (MICROTEKSCANNER)
    (MT.CONTROL.MENU)
    (MT.COMMAND.MENU)
    (MT.DISPLAY.MENU)
    (SETQ MT.STATUSWINDOW (CREATEW '(0 0 387 30) "Microtek Status Window"))
    (ATTACHWINDOW MT.COMMAND.MENUWINDOW MT.CONTROL.MENUWINDOW 'TOP 'JUSTIFY)
    (ATTACHWINDOW MT.DISPLAY.MENUWINDOW MT.CONTROL.MENUWINDOW 'BOTTOM 'JUSTIFY)
    (ATTACHWINDOW MT.STATUSWINDOW MT.COMMAND.MENUWINDOW 'TOP 'JUSTIFY)
    (if (FNTYP 'MT.PRINT.MENU)
        then (MT.PRINT.MENU))
    (MOVEW MT.CONTROL.MENUWINDOW '(500 . 160))
    (WINDOWPROP MT.CONTROL.MENUWINDOW 'ICONFN 'MT.SHRINKFN)
    [BITBLT MT.POINTER 0 0 MTHEIGHTRULER 20 (IDIFFERENCE 453 (FIX (FTIMES 5 (FDIFFERENCE (FQUOTIENT
                                                                                          
                                                                                       MT.PAPERLENGTH 
                                                                                          0.125)
                                                                                   24]
    (CLOSEF? MT.OUTSTREAM)
    (CLOSEF? MT.INSTREAM)
    (if \RS232C.READY
        then (RS232C.SHUTDOWN))
    [SETQ MT.OUTSTREAM (OPENSTREAM '{RS232} 'OUTPUT NIL '((BaudRate 19200)
                                                          (BitsPerSerialChar 8)
                                                          (Parity NONE)
                                                          (NoOfStopBits 1)
                                                          (FlowControl NIL)
                                                          (DTR T]
    (SETQ MT.INSTREAM (RS232C.OTHER.STREAM MT.OUTSTREAM))
    [SETQ MT.OLD.RS232C.FRAME.TIME.OUT (RS232C.GET.PARAMETERS '(FRAME.TIMEOUT]
    [RS232C.SET.PARAMETERS (LIST `(FRAME.TIMEOUT \, MT.RS232C.FRAME.TIMEOUT]
    (MT.SENDCOMMAND 1 (LIST '!))
    (if [SETQ RESPONSE (MT.SENDCOMMAND 1 (LIST '!]
        then (CLRPROMPT)
             (MT.PRINT.STATUS (CONCAT RESPONSE " READY"))
      else (RINGBELLS)
           (MT.PRINT.STATUS "Microtek Not Responding ...Check scanner and cables"])

(MT.SHRINKFN
  [LAMBDA (WINDOW ICON)                                      (* rdc "14-Oct-86 13:53")
    (PROG NIL
          (CLOSEW MTDISPLAYWINDOW)
          (CLOSEW MTDISPLAYWINDOW)
          (if (WINDOWPROP MT.CONTROL.MENUWINDOW 'ICONWINDOW)
              then (RETURN (WINDOWPROP MT.CONTROL.MENUWINDOW 'ICONWINDOW))
            else (RETURN (ICONW MT.ICON MT.ICON.MASK NIL T])

(MICROTEKSCANNER
  [LAMBDA NIL                                                (* rdc " 6-Aug-86 08:49")
    (PROG (MTWIDTHRULER YHEIGHT)
          (SETQ MTDISPLAYWINDOW (DECODE.WINDOW.ARG '(100 . 100) 350 579 "Microtek Scanner Page Map" 5
                                       ))
          (SETQ MTHEIGHTRULER (DECODE.WINDOW.ARG '(100 . 100) 50 570 NIL 5 T))
          (SETQ MTWIDTHRULER (DECODE.WINDOW.ARG '(100 . 100) 350 50 NIL 5 T))
          (DSPFONT (FONTCREATE 'GACHA 10 'BRR)
                 MTHEIGHTRULER)
          (DSPFONT (FONTCREATE 'GACHA 10 'BRR)
                 MTWIDTHRULER)
          (ATTACHWINDOW MTHEIGHTRULER MTDISPLAYWINDOW 'LEFT 'JUSTIFY)
          (ATTACHWINDOW MTWIDTHRULER MTDISPLAYWINDOW 'TOP 'CENTER)
          (WINDOWPROP MTDISPLAYWINDOW 'RESHAPEFN '(DON'T))
          (WINDOWPROP MTHEIGHTRULER 'RESHAPEFN '(DON'T))
          (WINDOWPROP MTHEIGHTRULER 'CURSORINFN 'MT.CURSOR.IN)
          (WINDOWPROP MTHEIGHTRULER 'CURSOROUTFN 'MT.CURSOR.OUT)
          (WINDOWPROP MTHEIGHTRULER 'BUTTONEVENTFN 'MT.GETLENGTH)
          (WINDOWPROP MTWIDTHRULER 'RESHAPEFN '(DON'T))
          (RULERX 0 1 16 16 40 1 MTWIDTHRULER)
          (RULERX 0 1 12 32 20 1 MTWIDTHRULER)
          (RULERX 0 1 8 64 10 1 MTWIDTHRULER)
          (RULERX 0 1 4 128 5 1 MTWIDTHRULER)
          (RULEX# 0 20 40 0 8 MTWIDTHRULER)
          (SETQ YHEIGHT 580)
          (RULERY YHEIGHT 1 16 15 -40 1 MTHEIGHTRULER)
          (RULERY YHEIGHT 1 12 28 -20 1 MTHEIGHTRULER)
          (RULERY YHEIGHT 1 8 56 -10 1 MTHEIGHTRULER)
          (RULERY YHEIGHT 1 4 112 -5 1 MTHEIGHTRULER)
          (RULEY# 0 YHEIGHT -40 0 14 MTHEIGHTRULER)
          (SETQ MT.HEIGHT.BM (BITMAPCREATE 50 588))
          (BITBLT MTHEIGHTRULER 0 0 MT.HEIGHT.BM)
          (SETQ MT.GRID (BITMAPCREATE 350 579))
          (GRID '(0 20 10 10) 42 56 'POINT MTDISPLAYWINDOW)
          (BITBLT MTDISPLAYWINDOW 0 0 MT.GRID])

(RULERX
  [LAMBDA (STARTX STARTY LEN NUMLINES INCR LINEWIDTH WIND)   (* rdc "27-Jun-86 15:28")
    (for I from 1 to NUMLINES do (DRAWLINE STARTX 1 STARTX LEN LINEWIDTH NIL WIND)
                                 (SETQ STARTX (PLUS STARTX INCR])

(RULEX#
  [LAMBDA (STARTX STARTY INCR STARTNUMBER ENDNUMBER WIND)    (* rdc " 6-Mar-86 16:13")
    (for I from STARTNUMBER to ENDNUMBER do (MOVETO STARTX STARTY WIND)
                                            (PRINT I WIND)
                                            (SETQ STARTX (PLUS STARTX INCR])

(RULERY
  [LAMBDA (STARTY STARTX LEN NUMLINES INCR LINEWIDTH WIND)   (* rdc " 6-Mar-86 16:25")
    (for I from 1 to NUMLINES do (DRAWLINE (DIFFERENCE (WINDOWPROP WIND 'WIDTH)
                                                  STARTX)
                                        STARTY
                                        (DIFFERENCE (DIFFERENCE (WINDOWPROP WIND 'WIDTH)
                                                           STARTX)
                                               LEN)
                                        STARTY LINEWIDTH NIL WIND)
                                 (SETQ STARTY (PLUS STARTY INCR])

(RULEY#
  [LAMBDA (STARTX STARTY INCR STARTNUMBER ENDNUMBER WIND)    (* rdc " 6-Mar-86 16:37")
    (for I from STARTNUMBER to ENDNUMBER do (MOVETO STARTX STARTY WIND)
                                            (PRINT I WIND)
                                            (SETQ STARTY (PLUS STARTY INCR])

(MT.GETLENGTH
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 15:34 by RDC")
    (TOTOPW MTHEIGHTRULER)
    (if (MOUSESTATE LEFT)
        then [SETQ MT.PAPERLENGTH (IMIN 453 (CDR (CURSORPOSITION NIL MTHEIGHTRULER]
             (CLEARW MTHEIGHTRULER)
             (BITBLT MT.HEIGHT.BM 0 0 MTHEIGHTRULER 0 0)
             (BITBLT MT.POINTER 0 0 MTHEIGHTRULER 20 MT.PAPERLENGTH)
             (SETQ MT.PAPERLENGTH (FTIMES (FIX (FPLUS 24.0 (FQUOTIENT (FDIFFERENCE 453 MT.PAPERLENGTH
                                                                             )
                                                                  5)))
                                         0.125))
             (FM.CHANGESTATE (FM.GETITEM 'PAGELENGTH NIL MT.CONTROL.MENUWINDOW)
                    MT.PAPERLENGTH MT.CONTROL.MENUWINDOW])

(MT.CURSOR.IN
  [LAMBDA NIL                                                (* edited%: " 1-Jul-86 17:55")
    (CURSOR (CURSORCREATE MT.POINTER 8 0])

(MT.CURSOR.OUT
  [LAMBDA NIL                                                (* edited%: " 1-Jul-86 17:12")
    (CURSOR T])

(MT.PRINT.STATUS
  [LAMBDA (MSG)                                              (* ; "Edited 13-Mar-87 14:42 by rdc")
    (CLEARW MT.STATUSWINDOW)
    (PRIN1 MSG MT.STATUSWINDOW])

(MT.CONTROL.MENU
  [LAMBDA NIL                                                (* ; "Edited 12-Mar-87 14:32 by rdc")

    (PROG (MENU.DESCRIPTION)
          [SETQ MENU.DESCRIPTION
           `([(PROPS ID RC)
              (GROUP (PROPS FORMAT TABLE BACKGROUND 23130)
                     ((TYPE DISPLAY LABEL "")
                      (TYPE DISPLAY LABEL "")
                      (TYPE DISPLAY LABEL "")
                      (TYPE DISPLAY LABEL "   Grain Size   Levels" BOX 1 FONT (MODERN 10 BOLD)
                            HJUSTIFY RIGHT))
                     ((TYPE STATE LABEL "Reduction!" MENUITEMS
                            (" 0%% = 300 DPI" " 5%% = 285 DPI" "10%% = 270 DPI" "15%% = 255 DPI" 
                                   "20%% = 240 DPI" "25%% = 225 DPI" "33%% = 200 DPI" 
                                   "35%% = 195 DPI" "40%% = 180 DPI" "45%% = 165 DPI" 
                                   "50%% = 150 DPI" "55%% = 135 DPI" "60%% = 120 DPI" 
                                   "67%% = 100 DPI" "70%% =  90 DPI" "75%% =  75 DPI")
                            INITSTATE " 0%% = 300 DPI" LINKS (DISPLAY (GROUP REDUCTION))
                            FONT
                            (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE DISPLAY ID REDUCTION LABEL "" MAXWIDTH 120 BOX 1)
                      (TYPE STATE LABEL "Gray Level!" MENUITEMS
                            (" 0 =   8X8    33" " 1 =   8X8    33" " 2 =   8X8    33" 
                                   " 3 =   8X8    33" " 4 =   6X6    37" " 5 =   5X5    26" 
                                   " 6 =   5X5    18" " 7 =   4X4    17" " 8 =   4X4    17" 
                                   " 9 =   4X4    17" "10 =   3X3    10" "11 =   2X2     5")
                            INITSTATE " 0 =   8X8    33" LINKS (DISPLAY (GROUP GREYLEVEL))
                            FONT
                            (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE DISPLAY ID GREYLEVEL LABEL "" MAXWIDTH 120 BOX 1))
                     ((TYPE DISPLAY LABEL ""]
             [(PROPS ID CD)
              (GROUP (PROPS FORMAT TABLE BACKGROUND 23130)
                     ((TYPE DISPLAY LABEL "Contrast:" FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE DISPLAY LABEL %, LEFTARROW HELDFN MT.LOWERCONTRAST MESSAGE "" BOX 1)
                      (TYPE DISPLAY LABEL %, CONTRASTBAR ID CONTRASTBAR MAXWIDTH 130 BOX 1)
                      (TYPE DISPLAY LABEL %, RIGHTARROW HELDFN MT.RAISECONTRAST MESSAGE "" BOX 1)
                      (TYPE EDIT ID CONTRAST LABEL 0 BOX 1 MAXWIDTH 23))
                     ((TYPE DISPLAY LABEL Brightness%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE DISPLAY LABEL %, LEFTARROW HELDFN MT.LOWERBRIGHTNESS MESSAGE "" BOX 1)
                      (TYPE DISPLAY LABEL %, BRIGHTBAR ID BRIGHTBAR MAXWIDTH 130 BOX 1)
                      (TYPE DISPLAY LABEL %, RIGHTARROW HELDFN MT.RAISEBRIGHTNESS MESSAGE "" BOX 1)
                      (TYPE EDIT ID BRIGHTNESS LABEL 0 BOX 1 MAXWIDTH 23))
                     ((TYPE DISPLAY LABEL ""]
             [(PROPS ID MODE)
              (GROUP (PROPS FORMAT TABLE BACKGROUND 23130)
                     ((TYPE STATE LABEL "Background!" ID BACK MENUITEMS ("HALFTONE" "LINEART")
                            INITSTATE "HALFTONE" LINKS (DISPLAY (GROUP BACKGROUNDDISPLAY))
                            SELECTEDFN MT.SELECT.BACKGROUND FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE DISPLAY LABEL "" ID BACKGROUNDDISPLAY MAXWIDTH 57 BOX 1)
                      (TYPE DISPLAY LABEL "Window Mode:" FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE DISPLAY ID WINDOWTYPE LABEL ,MT.WINDOW MAXWIDTH 58 BOX 1)
                      (TYPE DISPLAY LABEL "Page Length:" FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID PAGELENGTH LABEL "" BOX 1 MAXWIDTH 45))
                     ((TYPE DISPLAY LABEL ""]
             ((PROPS ID WINDOW)
              (GROUP (PROPS FORMAT TABLE BACKGROUND 23130)
                     ((TYPE MOMENTARY LABEL "Frame! " FONT (MODERN 10 BOLD)
                            SELECTEDFN MT.GETTRANSFRAME BOX 1)
                      (TYPE DISPLAY LABEL "")
                      (TYPE DISPLAY LABEL "")
                      (TYPE DISPLAY LABEL X1%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID TX1 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL Y1%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID TY1 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL X2%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID TX2 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL Y2%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID TY2 LABEL "" MAXWIDTH 45 BOX 1))
                     ((TYPE DISPLAY LABEL ""))
                     ((TYPE MOMENTARY LABEL "Window 1! " FONT (MODERN 10 BOLD)
                            SELECTEDFN MT.GETWINDOW1 BOX 1)
                      (TYPE STATE LABEL "ON?" ID SW1 INITSTATE " NO" MENUITEMS (" NO" "YES")
                            SELECTEDFN MT.UPDATE.HTWINDOWS LINKS (DISPLAY (GROUP WINDOW1))
                            FONT
                            (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE DISPLAY ID WINDOW1 LABEL "" BOX 1 MAXWIDTH 21)
                      (TYPE DISPLAY LABEL X1%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID X11 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL Y1%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID Y11 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL X2%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID X21 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL Y2%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID Y21 LABEL "" MAXWIDTH 45 BOX 1))
                     ((TYPE MOMENTARY LABEL "Window 2! " FONT (MODERN 10 BOLD)
                            SELECTEDFN MT.GETWINDOW2 BOX 1)
                      (TYPE STATE LABEL "ON?" ID SW2 INITSTATE " NO" MENUITEMS (" NO" "YES")
                            SELECTEDFN MT.UPDATE.HTWINDOWS LINKS (DISPLAY (GROUP WINDOW2))
                            FONT
                            (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE DISPLAY ID WINDOW2 LABEL "" BOX 1 MAXWIDTH 21)
                      (TYPE DISPLAY LABEL X1%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID X12 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL Y1%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID Y12 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL X2%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID X22 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL Y2%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID Y22 LABEL "" MAXWIDTH 45 BOX 1))
                     ((TYPE MOMENTARY LABEL "Window 3! " FONT (MODERN 10 BOLD)
                            SELECTEDFN MT.GETWINDOW3 BOX 1)
                      (TYPE STATE LABEL "ON?" ID SW3 INITSTATE " NO" MENUITEMS (" NO" "YES")
                            SELECTEDFN MT.UPDATE.HTWINDOWS LINKS (DISPLAY (GROUP WINDOW3))
                            FONT
                            (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE DISPLAY ID WINDOW3 LABEL "" BOX 1 MAXWIDTH 21)
                      (TYPE DISPLAY LABEL X1%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID X13 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL Y1%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID Y13 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL X2%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID X23 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL Y2%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID Y23 LABEL "" MAXWIDTH 45 BOX 1))
                     ((TYPE MOMENTARY LABEL "Window 4! " FONT (MODERN 10 BOLD)
                            SELECTEDFN MT.GETWINDOW4 BOX 1)
                      (TYPE STATE LABEL "ON?" ID SW4 INITSTATE " NO" MENUITEMS (" NO" "YES")
                            SELECTEDFN MT.UPDATE.HTWINDOWS LINKS (DISPLAY (GROUP WINDOW4))
                            FONT
                            (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE DISPLAY ID WINDOW4 LABEL "" BOX 1 MAXWIDTH 21)
                      (TYPE DISPLAY LABEL X1%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID X14 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL Y1%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID Y14 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL X2%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID X24 LABEL "" MAXWIDTH 45 BOX 1)
                      (TYPE DISPLAY LABEL Y2%: FONT (MODERN 10 BOLD)
                            BOX 1)
                      (TYPE EDIT ID Y24 LABEL "" MAXWIDTH 45 BOX 1]
          (SETQ MT.CONTROL.MENUWINDOW (FREEMENU MENU.DESCRIPTION "Microtek Configuration Menu" 23130 
                                             5))
          (FM.CHANGESTATE (FM.GETITEM 'BACK NIL MT.CONTROL.MENUWINDOW)
                 MT.BACKGROUND MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'TX1 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES (CAR MT.FRAME)
                        0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'TY1 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES (CADR MT.FRAME)
                        0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'TX2 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES (CADDR MT.FRAME)
                        0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'TY2 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES (CADDDR MT.FRAME)
                        0.125)
                 MT.CONTROL.MENUWINDOW)
          (MT.SELECT.BACKGROUND)
          (FM.CHANGESTATE (FM.GETITEM 'PAGELENGTH NIL MT.CONTROL.MENUWINDOW)
                 MT.PAPERLENGTH MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'REDUCTION NIL MT.CONTROL.MENUWINDOW)
                 MT.REDUCTION MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'CONTRAST NIL MT.CONTROL.MENUWINDOW)
                 MT.CONTRAST MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'BRIGHTNESS NIL MT.CONTROL.MENUWINDOW)
                 MT.BRIGHTNESS MT.CONTROL.MENUWINDOW)
          (MT.CHANGE.BRIGHTBAR MT.BRIGHTNESS)
          (MT.CHANGE.CONTRASTBAR MT.CONTRAST)
          (OPENW MT.CONTROL.MENUWINDOW])

(MT.CHANGE.BRIGHTBAR
  [LAMBDA (BRIGHTNESS)                                       (* ; "Edited  5-Mar-87 12:55 by RDC")
          
          (* * Moves the cursor in BRIGHTBAR from one place to another.)

    (BITBLT INITIALBRIGHTBAR NIL NIL BRIGHTBAR NIL NIL NIL NIL NIL 'REPLACE)
    (BITBLT MANCURSOR NIL NIL BRIGHTBAR (IPLUS 60 (FIX (TIMES BRIGHTNESS 2)))
           0 10 10 NIL 'INVERT)
    (FM.CHANGELABEL (FM.GETITEM 'BRIGHTBAR NIL MT.CONTROL.MENUWINDOW)
           BRIGHTBAR MT.CONTROL.MENUWINDOW])

(MT.RAISEBRIGHTNESS
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 13:05 by RDC")
    [if (LEQ (IPLUS MT.BRIGHTNESS 4)
             28)
        then (MT.CHANGE.BRIGHTBAR (SETQ MT.BRIGHTNESS (IPLUS MT.BRIGHTNESS 4]
    (FM.CHANGELABEL (FM.GETITEM 'BRIGHTNESS NIL MT.CONTROL.MENUWINDOW)
           MT.BRIGHTNESS MT.CONTROL.MENUWINDOW])

(MT.LOWERBRIGHTNESS
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 13:04 by RDC")
    [if (GEQ (IDIFFERENCE MT.BRIGHTNESS 4)
             -24)
        then (MT.CHANGE.BRIGHTBAR (SETQ MT.BRIGHTNESS (IDIFFERENCE MT.BRIGHTNESS 4]
    (FM.CHANGELABEL (FM.GETITEM 'BRIGHTNESS NIL MT.CONTROL.MENUWINDOW)
           MT.BRIGHTNESS MT.CONTROL.MENUWINDOW])

(MT.CHANGE.CONTRASTBAR
  [LAMBDA (CONTRAST)                                         (* ; "Edited  5-Mar-87 12:54 by RDC")
          
          (* * Moves the diamond cursor around inside CONTRASTBAR.)

    (BITBLT INITIALCONTRASTBAR NIL NIL CONTRASTBAR NIL NIL NIL NIL NIL 'REPLACE)
    (BITBLT MANCURSOR NIL NIL CONTRASTBAR (IPLUS 60 (FIX (TIMES CONTRAST 2)))
           0 10 10 NIL 'INVERT)
    (FM.CHANGELABEL (FM.GETITEM 'CONTRASTBAR NIL MT.CONTROL.MENUWINDOW)
           CONTRASTBAR MT.CONTROL.MENUWINDOW])

(MT.RAISECONTRAST
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 13:04 by RDC")
    [if (LEQ (IPLUS MT.CONTRAST 4)
             28)
        then (MT.CHANGE.CONTRASTBAR (SETQ MT.CONTRAST (IPLUS MT.CONTRAST 4]
    (FM.CHANGELABEL (FM.GETITEM 'CONTRAST NIL MT.CONTROL.MENUWINDOW)
           MT.CONTRAST MT.CONTROL.MENUWINDOW])

(MT.LOWERCONTRAST
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 13:03 by RDC")
    [if (GEQ (IDIFFERENCE MT.CONTRAST 4)
             -24)
        then (MT.CHANGE.CONTRASTBAR (SETQ MT.CONTRAST (IDIFFERENCE MT.CONTRAST 4]
    (FM.CHANGELABEL (FM.GETITEM 'CONTRAST NIL MT.CONTROL.MENUWINDOW)
           MT.CONTRAST MT.CONTROL.MENUWINDOW])

(MT.SELECT.BACKGROUND
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 15:09 by RDC")
    (SETQ MT.BACKGROUND (LISTGET (FM.GETSTATE MT.CONTROL.MENUWINDOW)
                               'BACK))
    (if (STREQUAL MT.BACKGROUND "LINEART")
        then (FM.CHANGELABEL (FM.GETITEM 'WINDOWTYPE NIL MT.CONTROL.MENUWINDOW)
                    "HALFTONE" MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'X11 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CAR MT.HALFTONEW1)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'Y11 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADR MT.HALFTONEW1)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'X21 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADDR MT.HALFTONEW1)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'Y21 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADDDR MT.HALFTONEW1)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'X12 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CAR MT.HALFTONEW2)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'Y12 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADR MT.HALFTONEW2)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'X22 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADDR MT.HALFTONEW2)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'Y22 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADDDR MT.HALFTONEW2)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'X13 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CAR MT.HALFTONEW3)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'Y13 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADR MT.HALFTONEW3)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'X23 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADDR MT.HALFTONEW3)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'Y23 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADDDR MT.HALFTONEW3)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'X14 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CAR MT.HALFTONEW4)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'Y14 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADR MT.HALFTONEW4)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'X24 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADDR MT.HALFTONEW4)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
             (FM.CHANGESTATE (FM.GETITEM 'Y24 NIL MT.CONTROL.MENUWINDOW)
                    (FTIMES (CADDDR MT.HALFTONEW4)
                           0.125)
                    MT.CONTROL.MENUWINDOW)
      else (FM.CHANGELABEL (FM.GETITEM 'WINDOWTYPE NIL MT.CONTROL.MENUWINDOW)
                  "LINEART" MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'X11 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CAR MT.TEXTW1)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'Y11 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADR MT.TEXTW1)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'X21 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADDR MT.TEXTW1)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'Y21 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADDDR MT.TEXTW1)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'X12 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CAR MT.TEXTW2)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'Y12 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADR MT.TEXTW2)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'X22 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADDR MT.TEXTW2)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'Y22 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADDDR MT.TEXTW2)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'X13 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CAR MT.TEXTW3)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'Y13 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADR MT.TEXTW3)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'X23 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADDR MT.TEXTW3)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'Y23 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADDDR MT.TEXTW3)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'X14 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CAR MT.TEXTW4)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'Y14 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADR MT.TEXTW4)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'X24 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADDR MT.TEXTW4)
                         0.125)
                  MT.CONTROL.MENUWINDOW)
           (FM.CHANGESTATE (FM.GETITEM 'Y24 NIL MT.CONTROL.MENUWINDOW)
                  (FTIMES (CADDDR MT.TEXTW4)
                         0.125)
                  MT.CONTROL.MENUWINDOW))
    (MT.UPDATE.HTWINDOWS])

(MT.GETTRANSFRAME
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 13:28 by RDC")
    (PROG (WINDOWLOC TWINDOW PAGEMAPWIDTH PAGEMAPHEIGHT ORGX ORGY WIDTH HEIGHT)
          (TOTOPW MTDISPLAYWINDOW)
          (SETQ WINDOWLOC (WINDOWPROP MTDISPLAYWINDOW 'REGION))
          (SETQ TWINDOW (SETQ WINDOW (GETREGION)))
          [SETQ PAGEMAPWIDTH (IDIFFERENCE (WINDOWPROP MTDISPLAYWINDOW 'WIDTH)
                                    (ITIMES 2 (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
          [SETQ PAGEMAPHEIGHT (IDIFFERENCE [IDIFFERENCE (WINDOWPROP MTDISPLAYWINDOW 'HEIGHT)
                                                  (ITIMES 2 (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
                                     (FONTPROP WindowTitleDisplayStream 'HEIGHT]
          [SETQ ORGX (IMAX 0 (IMIN PAGEMAPWIDTH (IDIFFERENCE (IMAX 0 (IDIFFERENCE (CAR TWINDOW)
                                                                            (CAR WINDOWLOC)))
                                                       (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
          [SETQ ORGY (IMAX 0 (IMIN PAGEMAPHEIGHT (IDIFFERENCE (IMAX 0 (IDIFFERENCE (CADR TWINDOW)
                                                                             (CADR WINDOWLOC)))
                                                        25]
          (SETQ WIDTH (IMIN PAGEMAPWIDTH (CADDR TWINDOW)))
          (if (GREATERP (IPLUS ORGX WIDTH)
                     PAGEMAPWIDTH)
              then (SETQ WIDTH (IDIFFERENCE PAGEMAPWIDTH ORGX)))
          (SETQ HEIGHT (IMIN PAGEMAPHEIGHT (CADDDR TWINDOW)))
          (if (GREATERP (IPLUS ORGY HEIGHT)
                     PAGEMAPHEIGHT)
              then (SETQ HEIGHT (IDIFFERENCE PAGEMAPHEIGHT ORGY)))
          (SETQ X1 (FIX (QUOTIENT ORGX 5.0)))
          (SETQ Y1 (FIX (QUOTIENT (IDIFFERENCE PAGEMAPHEIGHT (IPLUS ORGY HEIGHT))
                               5.0)))
          (SETQ X2 (FIX (QUOTIENT (IPLUS ORGX WIDTH)
                               5.0)))
          (SETQ Y2 (FIX (QUOTIENT (IDIFFERENCE PAGEMAPHEIGHT ORGY)
                               5.0)))
          (FM.CHANGESTATE (FM.GETITEM 'TX1 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES X1 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'TY1 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES Y1 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'TX2 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES X2 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'TY2 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES Y2 0.125)
                 MT.CONTROL.MENUWINDOW)
          (SETQ MT.FRAME (LIST X1 Y1 X2 Y2))
          (SETQ MT.FRAME.BOX (LIST ORGX (IPLUS ORGY 20)
                                   WIDTH HEIGHT))
          (MT.UPDATE.HTWINDOWS])

(MT.GETWINDOW1
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 14:23 by RDC")
    (PROG (WINDOWLOC TWINDOW PAGEMAPWIDTH PAGEMAPHEIGHT ORGX ORGY WIDTH HEIGHT)
          (TOTOPW MTDISPLAYWINDOW)
          (SETQ WINDOWLOC (WINDOWPROP MTDISPLAYWINDOW 'REGION))
          (SETQ TWINDOW (SETQ WINDOW (GETREGION)))
          [SETQ PAGEMAPWIDTH (IDIFFERENCE (WINDOWPROP MTDISPLAYWINDOW 'WIDTH)
                                    (ITIMES 2 (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
          [SETQ PAGEMAPHEIGHT (IDIFFERENCE [IDIFFERENCE (WINDOWPROP MTDISPLAYWINDOW 'HEIGHT)
                                                  (ITIMES 2 (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
                                     (FONTPROP WindowTitleDisplayStream 'HEIGHT]
          [SETQ ORGX (IMAX 0 (IMIN PAGEMAPWIDTH (IDIFFERENCE (IMAX 0 (IDIFFERENCE (CAR TWINDOW)
                                                                            (CAR WINDOWLOC)))
                                                       (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
          [SETQ ORGY (IMAX 0 (IMIN PAGEMAPHEIGHT (IDIFFERENCE (IMAX 0 (IDIFFERENCE (CADR TWINDOW)
                                                                             (CADR WINDOWLOC)))
                                                        25]
          (SETQ WIDTH (IMIN PAGEMAPWIDTH (CADDR TWINDOW)))
          (if (GREATERP (IPLUS ORGX WIDTH)
                     PAGEMAPWIDTH)
              then (SETQ WIDTH (IDIFFERENCE PAGEMAPWIDTH ORGX)))
          (SETQ HEIGHT (IMIN PAGEMAPHEIGHT (CADDDR TWINDOW)))
          (if (GREATERP (IPLUS ORGY HEIGHT)
                     PAGEMAPHEIGHT)
              then (SETQ HEIGHT (IDIFFERENCE PAGEMAPHEIGHT ORGY)))
          (SETQ X1 (FIX (QUOTIENT ORGX 5.0)))
          (SETQ Y1 (FIX (QUOTIENT (IDIFFERENCE PAGEMAPHEIGHT (IPLUS ORGY HEIGHT))
                               5.0)))
          (SETQ X2 (FIX (QUOTIENT (IPLUS ORGX WIDTH)
                               5.0)))
          (SETQ Y2 (FIX (QUOTIENT (IDIFFERENCE PAGEMAPHEIGHT ORGY)
                               5.0)))
          (FM.CHANGESTATE (FM.GETITEM 'X11 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES X1 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'Y11 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES Y1 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'X21 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES X2 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'Y21 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES Y2 0.125)
                 MT.CONTROL.MENUWINDOW)
          (if (STREQUAL "HALFTONE" (LISTGET (FM.GETSTATE MT.CONTROL.MENUWINDOW)
                                          'BACK))
              then (SETQ MT.TEXTW1 (LIST X1 Y1 X2 Y2))
                   (SETQ MT.TEXTW1BOX (LIST ORGX (IPLUS ORGY 20)
                                            WIDTH HEIGHT))
            else (SETQ MT.HALFTONEW1 (LIST X1 Y1 X2 Y2))
                 (SETQ MT.HALFTONEW1BOX (LIST ORGX (IPLUS ORGY 20)
                                              WIDTH HEIGHT)))
          (MT.UPDATE.HTWINDOWS])

(MT.GETWINDOW2
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 14:24 by RDC")
    (PROG (WINDOWLOC TWINDOW PAGEMAPWIDTH PAGEMAPHEIGHT ORGX ORGY WIDTH HEIGHT)
          (TOTOPW MTDISPLAYWINDOW)
          (SETQ WINDOWLOC (WINDOWPROP MTDISPLAYWINDOW 'REGION))
          (SETQ TWINDOW (SETQ WINDOW (GETREGION)))
          [SETQ PAGEMAPWIDTH (IDIFFERENCE (WINDOWPROP MTDISPLAYWINDOW 'WIDTH)
                                    (ITIMES 2 (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
          [SETQ PAGEMAPHEIGHT (IDIFFERENCE [IDIFFERENCE (WINDOWPROP MTDISPLAYWINDOW 'HEIGHT)
                                                  (ITIMES 2 (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
                                     (FONTPROP WindowTitleDisplayStream 'HEIGHT]
          [SETQ ORGX (IMAX 0 (IMIN PAGEMAPWIDTH (IDIFFERENCE (IMAX 0 (IDIFFERENCE (CAR TWINDOW)
                                                                            (CAR WINDOWLOC)))
                                                       (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
          [SETQ ORGY (IMAX 0 (IMIN PAGEMAPHEIGHT (IDIFFERENCE (IMAX 0 (IDIFFERENCE (CADR TWINDOW)
                                                                             (CADR WINDOWLOC)))
                                                        25]
          (SETQ WIDTH (IMIN PAGEMAPWIDTH (CADDR TWINDOW)))
          (if (GREATERP (IPLUS ORGX WIDTH)
                     PAGEMAPWIDTH)
              then (SETQ WIDTH (IDIFFERENCE PAGEMAPWIDTH ORGX)))
          (SETQ HEIGHT (IMIN PAGEMAPHEIGHT (CADDDR TWINDOW)))
          (if (GREATERP (IPLUS ORGY HEIGHT)
                     PAGEMAPHEIGHT)
              then (SETQ HEIGHT (IDIFFERENCE PAGEMAPHEIGHT ORGY)))
          (SETQ X1 (FIX (QUOTIENT ORGX 5.0)))
          (SETQ Y1 (FIX (QUOTIENT (IDIFFERENCE PAGEMAPHEIGHT (IPLUS ORGY HEIGHT))
                               5.0)))
          (SETQ X2 (FIX (QUOTIENT (IPLUS ORGX WIDTH)
                               5.0)))
          (SETQ Y2 (FIX (QUOTIENT (IDIFFERENCE PAGEMAPHEIGHT ORGY)
                               5.0)))
          (FM.CHANGESTATE (FM.GETITEM 'X12 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES X1 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'Y12 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES Y1 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'X22 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES X2 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'Y22 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES Y2 0.125)
                 MT.CONTROL.MENUWINDOW)
          (if (STREQUAL "HALFTONE" (LISTGET (FM.GETSTATE MT.CONTROL.MENUWINDOW)
                                          'BACK))
              then (SETQ MT.TEXTW2 (LIST X1 Y1 X2 Y2))
                   (SETQ MT.TEXTW2BOX (LIST ORGX (IPLUS ORGY 20)
                                            WIDTH HEIGHT))
            else (SETQ MT.HALFTONEW2 (LIST X1 Y1 X2 Y2))
                 (SETQ MT.HALFTONEW2BOX (LIST ORGX (IPLUS ORGY 20)
                                              WIDTH HEIGHT)))
          (MT.UPDATE.HTWINDOWS])

(MT.GETWINDOW3
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 14:25 by RDC")
    (PROG (WINDOWLOC TWINDOW PAGEMAPWIDTH PAGEMAPHEIGHT ORGX ORGY WIDTH HEIGHT)
          (TOTOPW MTDISPLAYWINDOW)
          (SETQ WINDOWLOC (WINDOWPROP MTDISPLAYWINDOW 'REGION))
          (SETQ TWINDOW (SETQ WINDOW (GETREGION)))
          [SETQ PAGEMAPWIDTH (IDIFFERENCE (WINDOWPROP MTDISPLAYWINDOW 'WIDTH)
                                    (ITIMES 2 (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
          [SETQ PAGEMAPHEIGHT (IDIFFERENCE [IDIFFERENCE (WINDOWPROP MTDISPLAYWINDOW 'HEIGHT)
                                                  (ITIMES 2 (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
                                     (FONTPROP WindowTitleDisplayStream 'HEIGHT]
          [SETQ ORGX (IMAX 0 (IMIN PAGEMAPWIDTH (IDIFFERENCE (IMAX 0 (IDIFFERENCE (CAR TWINDOW)
                                                                            (CAR WINDOWLOC)))
                                                       (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
          [SETQ ORGY (IMAX 0 (IMIN PAGEMAPHEIGHT (IDIFFERENCE (IMAX 0 (IDIFFERENCE (CADR TWINDOW)
                                                                             (CADR WINDOWLOC)))
                                                        25]
          (SETQ WIDTH (IMIN PAGEMAPWIDTH (CADDR TWINDOW)))
          (if (GREATERP (IPLUS ORGX WIDTH)
                     PAGEMAPWIDTH)
              then (SETQ WIDTH (IDIFFERENCE PAGEMAPWIDTH ORGX)))
          (SETQ HEIGHT (IMIN PAGEMAPHEIGHT (CADDDR TWINDOW)))
          (if (GREATERP (IPLUS ORGY HEIGHT)
                     PAGEMAPHEIGHT)
              then (SETQ HEIGHT (IDIFFERENCE PAGEMAPHEIGHT ORGY)))
          (SETQ X1 (FIX (QUOTIENT ORGX 5.0)))
          (SETQ Y1 (FIX (QUOTIENT (IDIFFERENCE PAGEMAPHEIGHT (IPLUS ORGY HEIGHT))
                               5.0)))
          (SETQ X2 (FIX (QUOTIENT (IPLUS ORGX WIDTH)
                               5.0)))
          (SETQ Y2 (FIX (QUOTIENT (IDIFFERENCE PAGEMAPHEIGHT ORGY)
                               5.0)))
          (FM.CHANGESTATE (FM.GETITEM 'X13 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES X1 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'Y13 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES Y1 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'X23 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES X2 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'Y23 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES Y2 0.125)
                 MT.CONTROL.MENUWINDOW)
          (if (STREQUAL "HALFTONE" (LISTGET (FM.GETSTATE MT.CONTROL.MENUWINDOW)
                                          'BACK))
              then (SETQ MT.TEXTW3 (LIST X1 Y1 X2 Y2))
                   (SETQ MT.TEXTW3BOX (LIST ORGX (IPLUS ORGY 20)
                                            WIDTH HEIGHT))
            else (SETQ MT.HALFTONEW3 (LIST X1 Y1 X2 Y2))
                 (SETQ MT.HALFTONEW3BOX (LIST ORGX (IPLUS ORGY 20)
                                              WIDTH HEIGHT)))
          (MT.UPDATE.HTWINDOWS])

(MT.GETWINDOW4
  [LAMBDA NIL                                                (* ; "Edited  5-Mar-87 14:26 by RDC")
    (PROG (WINDOWLOC TWINDOW PAGEMAPWIDTH PAGEMAPHEIGHT ORGX ORGY WIDTH HEIGHT)
          (TOTOPW MTDISPLAYWINDOW)
          (SETQ WINDOWLOC (WINDOWPROP MTDISPLAYWINDOW 'REGION))
          (SETQ TWINDOW (SETQ WINDOW (GETREGION)))
          [SETQ PAGEMAPWIDTH (IDIFFERENCE (WINDOWPROP MTDISPLAYWINDOW 'WIDTH)
                                    (ITIMES 2 (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
          [SETQ PAGEMAPHEIGHT (IDIFFERENCE [IDIFFERENCE (WINDOWPROP MTDISPLAYWINDOW 'HEIGHT)
                                                  (ITIMES 2 (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
                                     (FONTPROP WindowTitleDisplayStream 'HEIGHT]
          [SETQ ORGX (IMAX 0 (IMIN PAGEMAPWIDTH (IDIFFERENCE (IMAX 0 (IDIFFERENCE (CAR TWINDOW)
                                                                            (CAR WINDOWLOC)))
                                                       (WINDOWPROP MTDISPLAYWINDOW 'BORDER]
          [SETQ ORGY (IMAX 0 (IMIN PAGEMAPHEIGHT (IDIFFERENCE (IMAX 0 (IDIFFERENCE (CADR TWINDOW)
                                                                             (CADR WINDOWLOC)))
                                                        25]
          (SETQ WIDTH (IMIN PAGEMAPWIDTH (CADDR TWINDOW)))
          (if (GREATERP (IPLUS ORGX WIDTH)
                     PAGEMAPWIDTH)
              then (SETQ WIDTH (IDIFFERENCE PAGEMAPWIDTH ORGX)))
          (SETQ HEIGHT (IMIN PAGEMAPHEIGHT (CADDDR TWINDOW)))
          (if (GREATERP (IPLUS ORGY HEIGHT)
                     PAGEMAPHEIGHT)
              then (SETQ HEIGHT (IDIFFERENCE PAGEMAPHEIGHT ORGY)))
          (SETQ X1 (FIX (QUOTIENT ORGX 5.0)))
          (SETQ Y1 (FIX (QUOTIENT (IDIFFERENCE PAGEMAPHEIGHT (IPLUS ORGY HEIGHT))
                               5.0)))
          (SETQ X2 (FIX (QUOTIENT (IPLUS ORGX WIDTH)
                               5.0)))
          (SETQ Y2 (FIX (QUOTIENT (IDIFFERENCE PAGEMAPHEIGHT ORGY)
                               5.0)))
          (FM.CHANGESTATE (FM.GETITEM 'X14 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES X1 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'Y14 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES Y1 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'X24 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES X2 0.125)
                 MT.CONTROL.MENUWINDOW)
          (FM.CHANGESTATE (FM.GETITEM 'Y24 NIL MT.CONTROL.MENUWINDOW)
                 (FTIMES Y2 0.125)
                 MT.CONTROL.MENUWINDOW)
          (if (STREQUAL "HALFTONE" (LISTGET (FM.GETSTATE MT.CONTROL.MENUWINDOW)
                                          'BACK))
              then (SETQ MT.TEXTW4 (LIST X1 Y1 X2 Y2))
                   (SETQ MT.TEXTW4BOX (LIST ORGX (IPLUS ORGY 20)
                                            WIDTH HEIGHT))
            else (SETQ MT.HALFTONEW4 (LIST X1 Y1 X2 Y2))
                 (SETQ MT.HALFTONEW4BOX (LIST ORGX (IPLUS ORGY 20)
                                              WIDTH HEIGHT)))
          (MT.UPDATE.HTWINDOWS])

(MT.UPDATE.HTWINDOWS
  [LAMBDA NIL                                                (* ; "Edited 12-Mar-87 12:29 by rdc")

    (PROG ((PARAMETER.LIST (FM.GETSTATE MT.CONTROL.MENUWINDOW))
           (WINDOW (LIST 0 0 0 0)))
          (CLEARW MTDISPLAYWINDOW)
          (BITBLT MT.GRID 0 0 MTDISPLAYWINDOW)
          (MT.DRAWAREABOX (CAR MT.FRAME.BOX)
                 (CADR MT.FRAME.BOX)
                 (CADDR MT.FRAME.BOX)
                 (CADDDR MT.FRAME.BOX)
                 2 NIL MTDISPLAYWINDOW)
          (if (STREQUAL (LISTGET PARAMETER.LIST 'SW1)
                     "YES")
              then (if (STREQUAL (LISTGET PARAMETER.LIST 'BACK)
                              "HALFTONE")
                       then (SETQ WINDOW MT.TEXTW1BOX)
                     else (SETQ WINDOW MT.HALFTONEW1BOX)))
          (BLTSHADE 2000 MTDISPLAYWINDOW (CAR WINDOW)
                 (CADR WINDOW)
                 (CADDR WINDOW)
                 (CADDDR WINDOW))
          (if (STREQUAL (LISTGET PARAMETER.LIST 'SW2)
                     "YES")
              then (if (STREQUAL (LISTGET PARAMETER.LIST 'BACK)
                              "HALFTONE")
                       then (SETQ WINDOW MT.TEXTW2BOX)
                     else (SETQ WINDOW MT.HALFTONEW2BOX)))
          (BLTSHADE GRAYSHADE MTDISPLAYWINDOW (CAR WINDOW)
                 (CADR WINDOW)
                 (CADDR WINDOW)
                 (CADDDR WINDOW))
          (if (STREQUAL (LISTGET PARAMETER.LIST 'SW3)
                     "YES")
              then (if (STREQUAL (LISTGET PARAMETER.LIST 'BACK)
                              "HALFTONE")
                       then (SETQ WINDOW MT.TEXTW3BOX)
                     else (SETQ WINDOW MT.HALFTONEW3BOX)))
          (BLTSHADE 45 MTDISPLAYWINDOW (CAR WINDOW)
                 (CADR WINDOW)
                 (CADDR WINDOW)
                 (CADDDR WINDOW))
          (if (STREQUAL (LISTGET PARAMETER.LIST 'SW4)
                     "YES")
              then (if (STREQUAL (LISTGET PARAMETER.LIST 'BACK)
                              "HALFTONE")
                       then (SETQ WINDOW MT.TEXTW4BOX)
                     else (SETQ WINDOW MT.HALFTONEW4BOX)))
          (BLTSHADE 50000 MTDISPLAYWINDOW (CAR WINDOW)
                 (CADR WINDOW)
                 (CADDR WINDOW)
                 (CADDDR WINDOW])

(MT.DRAWAREABOX
  [LAMBDA (BOXLEFT BOXBOTTOM BOXWIDTH BOXHEIGHT BORDER OP W TEXTURE)
    (OR TEXTURE (SETQ TEXTURE BLACKSHADE))                   (* draws lines inside the region.)
                                                             (* draw left edge)
    (BITBLT NIL NIL NIL W BOXLEFT BOXBOTTOM BORDER BOXHEIGHT 'TEXTURE OP TEXTURE)
                                                             (* draw top)
    (BITBLT NIL NIL NIL W (PLUS BOXLEFT BORDER)
           (DIFFERENCE (PLUS BOXBOTTOM BOXHEIGHT)
                  BORDER)
           (DIFFERENCE BOXWIDTH (PLUS BORDER BORDER))
           BORDER
           'TEXTURE OP TEXTURE)                              (* draw bottom)
    (BITBLT NIL NIL NIL W (PLUS BOXLEFT BORDER)
           BOXBOTTOM
           (DIFFERENCE BOXWIDTH (PLUS BORDER BORDER))
           BORDER
           'TEXTURE OP TEXTURE)                              (* draw right edge)
    (BITBLT NIL NIL NIL W (DIFFERENCE (PLUS BOXLEFT BOXWIDTH)
                                 BORDER)
           BOXBOTTOM BORDER BOXHEIGHT 'TEXTURE OP TEXTURE])
)
(* * Command Functions)

(DEFINEQ

(MT.COMMAND.MENU
  [LAMBDA NIL                                                (* ; "Edited 20-May-87 10:51 by ")

    (PROG (MENU.DESCRIPTION)
          [SETQ MENU.DESCRIPTION
           `([(PROPS ID COMMAND)
              (GROUP (PROPS FORMAT TABLE BACKGROUND 23130)
                     ((TYPE MOMENTARY LABEL SCAN! FONT (MODERN 12 BOLD)
                            SELECTEDFN MT.SCAN BOX 3)
                      (TYPE MOMENTARY LABEL STOP! FONT (MODERN 12 BOLD)
                            SELECTEDFN MT.STOP.SCANNING BOX 3)
                      (TYPE MOMENTARY LABEL RESET! FONT (MODERN 12 BOLD)
                            SELECTEDFN MT.RESET BOX 3)
                      (TYPE MOMENTARY LABEL PAGEMAP! FONT (MODERN 12 BOLD)
                            SELECTEDFN MT.PAGEMAP BOX 3)
                      (TYPE MOMENTARY LABEL QUIT! ID QUIT FONT (MODERN 12 BOLD)
                            SELECTEDFN MT.QUIT BOX 3]
             ((PROPS ID COMMAND2)
              (GROUP (PROPS FORMAT TABLE BACKGROUND 23130)
                     ((TYPE MOMENTARY LABEL "Output Filename!: " FONT (MODERN 10 BOLD)
                            SELECTEDFN MT.GET.OUTFILENAME BOX 1)
                      (TYPE EDIT ID OUTFILENAME LABEL {DSK}<LISPFILES>IMAGE BOX 1 MAXWIDTH 375]
          (SETQ MT.COMMAND.MENUWINDOW (FREEMENU MENU.DESCRIPTION "Microtek Command Menu" 23130 5))
          (OPENW MT.COMMAND.MENUWINDOW])

(MT.GET.OUTFILENAME
  [LAMBDA NIL                                                (* ; "Edited 12-Mar-87 14:48 by rdc")
    (FM.EDITITEM (FM.GETITEM 'OUTFILENAME NIL MT.COMMAND.MENUWINDOW)
           MT.COMMAND.MENUWINDOW])

(MT.SCAN
  [LAMBDA NIL                                                (* rdc "20-Oct-86 15:06")
    (ADD.PROCESS '(MT.START.SCANNING) 'NAME 'MICROTEK.SCANNING])

(MT.START.SCANNING
  [LAMBDA NIL                                                (* ; "Edited 19-May-87 11:29 by ")
                                                             (* ; "Edited 19-May-87 11:23 by ")

    (PROG (COREFILE HDR DATACOUNT (SCANLINECOUNT 0)
                 CHECKSUM NUMBEROFBYTES OUTFILESTREAM CORESTREAM)
          
          (* * Reset the Scanner)

          (MT.RESET)
          
          (* * Send the scan parameters)

          (if (NOT (MT.SEND.SCAN.PARAMETERS))
              then (MT.PRINT.STATUS "SCANNING PARAMETER NOT VALID")
                   (RINGBELLS)
                   (BLOCK 3000)
                   (MT.RESET)
                   (RETURN NIL))
          
          (* * Setup the Core output file)

          (SETQ COREFILE (MT.SETUPSCANFILE))
          
          (* * Send start scanning command)

          (MT.SENDCOMMAND 1 (LIST 'S))
          (MT.PRINT.STATUS "SCANNING ...")
          
          (* * Get headerof each scan line)

      AGAIN
          (SETQ HDR (for I from 1 to 4 collect (BIN MT.INSTREAM)))
          (if (OR (EQP (CADR HDR)
                       4)
                  (EQP (CADR HDR)
                       0))
              then 
          
          (* * BYTE count are bytes 3 and 4 Need to LLSH 3 and add to 4 to get total byte 
          count)

                   [SETQ DATACOUNT (IPLUS (LLSH (CAR (FNTH HDR 3))
                                                8)
                                          (CAR (FNTH HDR 4]
                   (SETQ SCANLINECOUNT (IPLUS SCANLINECOUNT 1))
                   (for I from 1 to DATACOUNT do (BOUT COREFILE (BIN MT.INSTREAM)))
                   (SETQ CHECKSUM (BIN MT.INSTREAM))
                   (MT.SENDACK)
                   (GO AGAIN)
            else (SETQ DATA (BIN MT.INSTREAM))
                 (if (EQP DATA (CHARCODE E))
                     then (while (READP MT.INSTREAM) do (BIN MT.INSTREAM))
                          (MT.SENDACK)
                          (MT.PRINT.STATUS "SCANNING DONE")
                   elseif (EQP DATA (CHARCODE ?))
                     then (MT.PRINT.ERROR.MSG (BIN MT.INSTREAM))
                          (until (NOT (READP MT.INSTREAM)) do (BIN MT.INSTREAM))
                          (MT.SENDACK)
                          (CLOSEF? COREFILE)
                          (RETURN NIL)))
          (MT.PRINT.STATUS "....COPYING TO FILE....")
          (SETQ NUMBEROFBYTES (GETFILEPTR COREFILE))
          (CLOSEF COREFILE)
          (SETQ OUTFILESTREAM (OPENSTREAM (LISTGET (FM.GETSTATE MT.COMMAND.MENUWINDOW)
                                                 'OUTFILENAME)
                                     'OUTPUT))
          (SETQ CORESTREAM (OPENSTREAM COREFILE 'INPUT))
          
          (* PRINTOUT HEADER INFORMATION ON FILE -
          THE NO INDICATES THAT THIS DOES NOT CONTAIN COMPRESSED DATA)

          (PRINT 'NO OUTFILESTREAM)
          (SETQ REDUCTION (SUBSTRING (CADR (MEMBER "Reduction!" (FM.GETSTATE MT.CONTROL.MENUWINDOW)))
                                 1 2))
          (if (STREQUAL (SUBSTRING REDUCTION 1 1)
                     " ")
              then (SETQ REDUCTION (SUBSTRING REDUCTION 2 2)))
          (PRINT (MKATOM REDUCTION)
                 OUTFILESTREAM)
          (SETQ GREYLEVEL (SUBSTRING (CADR (MEMBER "Gray Level!" (FM.GETSTATE MT.CONTROL.MENUWINDOW))
                                           )
                                 1 2))
          (if (STREQUAL (SUBSTRING GREYLEVEL 1 1)
                     " ")
              then (SETQ GREYLEVEL (SUBSTRING GREYLEVEL 2 2)))
          (PRINT (MKATOM GREYLEVEL)
                 OUTFILESTREAM)
          (PRINT (LISTGET (FM.GETSTATE MT.CONTROL.MENUWINDOW)
                        'CONTRAST)
                 OUTFILESTREAM)
          (PRINT (LISTGET (FM.GETSTATE MT.CONTROL.MENUWINDOW)
                        'BRIGHTNESS)
                 OUTFILESTREAM)
          (PRINT SCANLINECOUNT OUTFILESTREAM)
          (PRINT DATACOUNT OUTFILESTREAM)
          (COPYBYTES CORESTREAM OUTFILESTREAM NUMBEROFBYTES)
          (CLOSEF OUTFILESTREAM)
          (DELFILE (CLOSEF CORESTREAM))
          (RINGBELLS)
          (MT.PRINT.STATUS "DONE"])

(MT.SETUPSCANFILE
  [LAMBDA NIL                                                (* ; "Edited 13-Mar-87 14:57 by rdc")
          
          (* * will check to see if the scratch file is in core.
          If it is it will dirty 500 pages to bring them into real memory
          (speedup when writing to them!)%. If there wasn't a file, it creates it and 
          then dirtys 500 pgs. RETURNS%: stream to the file)

    (PROG (RECOG FILE)
          (MT.PRINT.STATUS "...SETTING UP SCRATCH FILE...")
          [SETQ FILE (OPENSTREAM '{CORE}SCANNER.SCRATCH 'OUTPUT 'NEW '(SEQUENTIAL T]
          
          (* * now expand the file so you can read and transfer fast)

          (for I from 0 to 260000 by 512 do (SETFILEPTR FILE I)
                                            (BOUT FILE 1))
          
          (* * and reset to the beginning)

          (SETFILEPTR FILE 0)
          (MT.PRINT.STATUS "DONE...")
          (RETURN FILE])

(MT.SEND.SCAN.PARAMETERS
  [LAMBDA NIL                                                (* ; "Edited 20-May-87 09:40 by ")
                                                             (* ; "Edited 20-May-87 09:31 by ")

    (DECLARE (GLOBALVARS MT.CONTROL.MENUWINDOW MT.PAPERLENGTH MT.FRAME))
    (PROG (PARAMETER.LIST PAPERLENGTH SCANFRAME BACKGROUND GREYLEVEL CONTRAST BRIGHTNESS RESOLUTION 
                 DATACOMPRESSION (NO.OF.WINDOWS 0)
                 (COORD.LIST NIL))
          (SETQ PARAMETER.LIST (FM.GETSTATE MT.CONTROL.MENUWINDOW))
          (SETQ PAPERLENGTH (IPLUS 24 (QUOTIENT (FDIFFERENCE MT.PAPERLENGTH 3.0)
                                             0.125)))
          (SETQ SCANFRAME MT.FRAME)
          (if (EQ (MKATOM (LISTGET PARAMETER.LIST 'BACK))
                  'HALFTONE)
              then (SETQ BACKGROUND 'H)
            else (SETQ BACKGROUND 'T))
          [if (STREQUAL (LISTGET PARAMETER.LIST 'SW1)
                     "YES")
              then (SETQ NO.OF.WINDOWS (IPLUS NO.OF.WINDOWS 1))
                   (SETQ COORD.LIST (APPEND COORD.LIST (if (EQ BACKGROUND 'H)
                                                           then MT.TEXTW1
                                                         else MT.HALFTONEW1]
          [if (STREQUAL (LISTGET PARAMETER.LIST 'SW2)
                     "YES")
              then (SETQ NO.OF.WINDOWS (IPLUS NO.OF.WINDOWS 1))
                   (SETQ COORD.LIST (APPEND COORD.LIST (if (EQ BACKGROUND 'H)
                                                           then MT.TEXTW2
                                                         else MT.HALFTONEW2]
          [if (STREQUAL (LISTGET PARAMETER.LIST 'SW3)
                     "YES")
              then (SETQ NO.OF.WINDOWS (IPLUS NO.OF.WINDOWS 1))
                   (SETQ COORD.LIST (APPEND COORD.LIST (if (EQ BACKGROUND 'H)
                                                           then MT.TEXTW3
                                                         else MT.HALFTONEW3]
          [if (STREQUAL (LISTGET PARAMETER.LIST 'SW4)
                     "YES")
              then (SETQ NO.OF.WINDOWS (IPLUS NO.OF.WINDOWS 1))
                   (SETQ COORD.LIST (APPEND COORD.LIST (if (EQ BACKGROUND 'H)
                                                           then MT.TEXTW4
                                                         else MT.HALFTONEW4]
          (if (STREQUAL (SUBSTRING (SETQ GREYLEVEL (SUBSTRING (CADR (MEMBER "Gray Level!" 
                                                                           PARAMETER.LIST))
                                                          1 2))
                               1 1)
                     " ")
              then (SETQ GREYLEVEL (SUBSTRING GREYLEVEL 2 2)))
          (SETQ GREYLEVEL (MKATOM GREYLEVEL))
          (SETQ CONTRAST (IPLUS 7 (IQUOTIENT (MKATOM (LISTGET PARAMETER.LIST 'CONTRAST))
                                         4)))
          (SETQ BRIGHTNESS (IPLUS 7 (IQUOTIENT (MKATOM (LISTGET PARAMETER.LIST 'BRIGHTNESS))
                                           4)))
          (if (STREQUAL (SUBSTRING (SETQ REDUCTION (SUBSTRING (CADR (MEMBER "Reduction!" 
                                                                           PARAMETER.LIST))
                                                          1 2))
                               1 1)
                     " ")
              then (SETQ REDUCTION (SUBSTRING REDUCTION 2 2)))
          (SETQ RESOLUTION
           (LISTGET '(0 16 5 17 10 18 15 19 20 20 25 21 33 22 35 23 40 24 45 25 50 26 55 27 60 28 67 
                        29 70 30 75 31) (MKATOM REDUCTION)))
          (if [EQ 'YES (MKATOM (LISTGET PARAMETER.LIST 'COMPRESSDATA]
              then (SETQ DATACOMPRESSION 1)
            else (SETQ DATACOMPRESSION 0))
          (if [AND (MT.SENDCOMMAND 2 (LIST 'L PAPERLENGTH))
                   (MT.SENDCOMMAND 5 (APPEND (LIST 'F)
                                            SCANFRAME))
                   [if (GREATERP NO.OF.WINDOWS 0)
                       then (MT.SENDCOMMAND (IPLUS 2 (ITIMES NO.OF.WINDOWS 4))
                                   (APPEND (LIST BACKGROUND)
                                          (LIST NO.OF.WINDOWS)
                                          COORD.LIST))
                     else (MT.SENDCOMMAND 2 (APPEND (LIST BACKGROUND)
                                                   (LIST 0]
                   (MT.SENDCOMMAND 2 (APPEND (LIST 'G)
                                            (LIST GREYLEVEL)))
                   (MT.SENDCOMMAND 2 (APPEND (LIST 'K)
                                            (LIST CONTRAST)))
                   (MT.SENDCOMMAND 2 (APPEND (LIST 'B)
                                            (LIST BRIGHTNESS)))
                   (MT.SENDCOMMAND 2 (APPEND (LIST 'R)
                                            (LIST RESOLUTION)))
                   (MT.SENDCOMMAND 2 (APPEND (LIST 'C)
                                            (LIST DATACOMPRESSION]
              then (RETURN T)
            else (RETURN NIL])

(MT.SENDCOMMAND
  [LAMBDA (DATACOUNT DATALIST)                               (* ; "Edited 19-May-87 14:47 by ")

    (PROG (DATA RESPONSE (CHECKSUM 0)
                (RETRYCOUNT 0))                              (* SEND \ AND |80H|)
      RETRY
          (BOUT MT.OUTSTREAM (CHARCODE "\"))
          (BOUT MT.OUTSTREAM 128)
          (BOUT MT.OUTSTREAM 0)
          (BOUT MT.OUTSTREAM DATACOUNT)
          (SETQ CHECKSUM (IPLUS CHECKSUM 128 0 DATACOUNT))
          [for DATA in DATALIST do (if (NUMBERP DATA)
                                       then (BOUT MT.OUTSTREAM DATA)
                                            (SETQ CHECKSUM (IPLUS CHECKSUM DATA))
                                     else (BOUT MT.OUTSTREAM (CAR (CHCON DATA)))
                                          (SETQ CHECKSUM (IPLUS CHECKSUM (CAR (CHCON DATA]
          (FORCEOUTPUT MT.OUTSTREAM)
          (BOUT MT.OUTSTREAM (IPLUS (LOGXOR 255 CHECKSUM)
                                    1))
          (FORCEOUTPUT MT.OUTSTREAM)
      REREAD
          (BLOCK 500)
          (SETQ RESPONSE (while (READP MT.INSTREAM) collect (BIN MT.INSTREAM)))
          (if (AND (NEQ (CAR RESPONSE)
                        92)
                   (NEQ (CAR RESPONSE)
                        6))
              then (SETQ CHECKSUM 0)
                   (SETQ RETRYCOUNT (IPLUS RETRYCOUNT 1))
                   (if (EQ RETRYCOUNT 5)
                       then (RETURN NIL)
                     else (GO RETRY)))
          (if (GREATERP (LENGTH RESPONSE)
                     2)
              then 
          
          (* * Compute checksum on all characters after the \)

                   (if [NOT (SETQ RESPONSE (MT.COMPUTECHECKSUM (CDR (MEMBER (CHARCODE "\")
                                                                           RESPONSE]
                       then (GO REREAD))
                   (if (EQP (CAR RESPONSE)
                            (CHARCODE ?))
                       then (MT.PRINT.ERROR.MSG (CADR RESPONSE))
                            (RETURN NIL)
                     else (RETURN (PACKC RESPONSE)))
            else (RETURN T])

(MT.COMPUTECHECKSUM
  [LAMBDA (RESPONSE)                                         (* ; "Edited 19-May-87 14:49 by ")
                                                             (* ; "Edited 19-May-87 14:49 by ")
          
          (* * Response should be all bytes after the \.
          Byte 1 = Command type Byte 2 = High part data count Byte 3 = Low part of data 
          count after databytes should be Checksum and remaining data after this is 
          extraneous)

    (PROG (DATACOUNT LENGTHDIFF DATALIST CHECKSUM (SUMCHECK 0))
          (SETQ DATALIST RESPONSE)
          (SETQ DATACOUNT (IPLUS (LLSH (CADR RESPONSE)
                                       8)
                                 (CADDR RESPONSE)))
          (SETQ LENGTHDIFF (IDIFFERENCE (LENGTH RESPONSE)
                                  (IPLUS DATACOUNT 3)))
          [for I from 1 to LENGTHDIFF do (SETQ DATALIST (REVERSE (CDR (REVERSE DATALIST]
          [SETQ CHECKSUM (CAR (NTH RESPONSE (IPLUS 4 DATACOUNT]
          (for DATA in DATALIST do (SETQ SUMCHECK (IPLUS SUMCHECK DATA)))
          (if (OR (EQP CHECKSUM (IPLUS (LOGXOR 255 (LRSH (LLSH SUMCHECK 24)
                                                         24))
                                       1))
                  (EQ CHECKSUM 0))
              then (MT.SENDACK) 
          
          (* * Return data minus the response type, hi & low data count and checksum)

                   (RETURN (CDDDR DATALIST))
            else (MT.SENDNAK)
                 (RETURN NIL])

(MT.PRINT.ERROR.MSG
  [LAMBDA (ERRORCODE)                                        (* rdc " 5-Aug-86 09:39")
    (RINGBELLS)
    (SELECTQ ERRORCODE
        (1 (MT.PRINT.STATUS "U88 ROM FAILURE"))
        (2 (MT.PRINT.STATUS "U81 ROM FAILURE"))
        (3 (MT.PRINT.STATUS "U64 ROM FAILURE"))
        (4 (MT.PRINT.STATUS "U72 ROM FAILURE"))
        (6 (MT.PRINT.STATUS "U23 ROM FAILURE"))
        (7 (MT.PRINT.STATUS "U31 ROM FAILURE"))
        (8 (MT.PRINT.STATUS "U29 ROM FAILURE"))
        (9 (MT.PRINT.STATUS "Paper sensor failure"))
        (16 (MT.PRINT.STATUS "Lamp failure or image sensor circuit failure"))
        (128 (MT.PRINT.STATUS "Illegal Command"))
        (129 (MT.PRINT.STATUS "Illegal Gray Scale Setting"))
        (131 (MT.PRINT.STATUS "Illegal Resolution Setting"))
        (132 (MT.PRINT.STATUS "Illegal Data Compression Parameter"))
        (133 (MT.PRINT.STATUS "Illegal Scanning Frame Coordinate"))
        (134 (MT.PRINT.STATUS "Illegal number of windows"))
        (135 (MT.PRINT.STATUS "Illegal window coordinate"))
        (136 (MT.PRINT.STATUS "Illegal Contrast Setting"))
        (137 (MT.PRINT.STATUS "Illegal Paper Length setting"))
        (138 (MT.PRINT.STATUS "Record Type error"))
        (139 (MT.PRINT.STATUS "NAK receiced on 5 consecutive transmissions"))
        (140 (MT.PRINT.STATUS "Paper jammed or longer than length setting"))
        (141 (MT.PRINT.STATUS "Illegal Brightness setting"))
        (T])

(MT.SENDACK
  [LAMBDA NIL                                                (* rdc "22-Jun-86 16:26")
    (BOUT MT.OUTSTREAM 6)
    (FORCEOUTPUT MT.OUTSTREAM])

(MT.SENDNAK
  [LAMBDA NIL                                                (* rdc "22-Jun-86 16:27")
    (BOUT MT.OUTSTREAM 21)
    (FORCEOUTPUT MT.OUTSTREAM])

(MT.STOP.SCANNING
  [LAMBDA NIL                                                (* rdc "28-Jun-86 11:27")
    (PROG NIL
          (BOUT MT.OUTSTREAM 3)
          (FORCEOUTPUT MT.OUTSTREAM)
          (DEL.PROCESS `MICROTEK.SCANNING)
          (MT.RESET])

(MT.RESET
  [LAMBDA NIL                                                (* ; "Edited 19-May-87 14:49 by ")
                                                             (* ; "Edited 19-May-87 13:21 by ")

    [if (AND (EQ \RS232C.READY T)
             (EQ [CDAR (RS232C.GET.PARAMETERS '(BaudRate]
                 MT.BAUDRATE)
             (EQ [CADAR (RS232C.GET.PARAMETERS '(FlowControl]
                 0)
             (LEQ [CDAR (RS232C.GET.PARAMETERS '(FRAME.TIMEOUT]
                  50)
             (OPENP MT.OUTSTREAM)
             (OPENP MT.INSTREAM))
        then (MT.SENDCOMMAND 1 (LIST 'X))
      else (RS232C.INIT MT.BAUDRATE 8 'NONE 1 'DTR)
           (CLOSEF? MT.OUTSTREAM)
           (CLOSEF? MT.INSTREAM)
           (SETQ MT.OUTSTREAM (OPENSTREAM '{RS232} 'OUTPUT))
           (SETQ MT.INSTREAM (RS232C.OTHER.STREAM MT.OUTSTREAM))
           (RS232C.SET.PARAMETERS (LIST `(FRAME.TIMEOUT \, MT.RS232C.FRAME.TIMEOUT]
    (DELFILE (CLOSEF? '{CORE}SCANNER.SCRATCH))
    (MT.SENDCOMMAND 1 (LIST '!))
    (MT.SENDCOMMAND 1 (LIST '!))
    (if [SETQ RESPONSE (MT.SENDCOMMAND 1 (LIST '!]
        then (CLRPROMPT)
             (MT.PRINT.STATUS (CONCAT RESPONSE " READY"))
      else (RINGBELLS)
           (MT.PRINT.STATUS "Microtek Not Responding ...Check scanner and cables"])

(MT.PAGEMAP
  [LAMBDA NIL                                                (* rdc "31-Jul-86 09:19")
    (if (OPENWP MTDISPLAYWINDOW)
        then (CLOSEW MTDISPLAYWINDOW)
      else (OPENW MTDISPLAYWINDOW])

(MT.QUIT
  [LAMBDA NIL                                                (* rdc "20-Oct-86 15:02")
    [SETQ RESPONSE (MENU (create MENU
                                ITEMS ← '("QUIT" "SHUTDOWN RS232 PORT ONLY")
                                MENUFONT ← (FONTCREATE 'MODERN 10 'BOLD]
    (CLOSEF? MT.INSTREAM)
    (CLOSEF? MT.OUTSTREAM)
    (RS232C.SHUTDOWN)
    (if (STREQUAL RESPONSE "QUIT")
        then (DELFILE (CLOSEF? '{CORE}SCANNER.SCRATCH))
             (CLOSEW MTDISPLAYWINDOW)
             (CLOSEW MT.CONTROL.MENUWINDOW])
)
(* * Functions to convert and print scanned images)

(DEFINEQ

(MT.DISPLAY.MENU
  [LAMBDA NIL                                     (* ; 
                                                 "Edited 21-May-87 09:42 by ronald clarke:xsis:xerox")
                                                             (* ; "Edited 20-May-87 10:57 by ")

    (PROG (MENU.DESCRIPTION)
          [SETQ MENU.DESCRIPTION
           `(((PROPS ID DISPLAY1)
              (GROUP (PROPS FORMAT EXPLICIT COORDINATES GROUP BACKGROUND 23130)
                     (TYPE MOMENTARY LABEL "CREATE BITMAP!" FONT (MODERN 12 BOLD)
                           SELECTEDFN MT.CREATEBM BOX 3 LEFT 1 BOTTOM 35)
                     (TYPE MOMENTARY LABEL "Bitmap Name!: " FONT (MODERN 10 BOLD)
                           SELECTEDFN MT.GET.BITMAPNAME BOX 1 LEFT 1 BOTTOM 18)
                     (TYPE EDIT ID BITMAPNAME LABEL "IMAGE" BOX 1 LEFT 100 BOTTOM 18 MAXWIDTH 170)
                     (TYPE STATE LABEL "Shrinkfactor! " MENUITEMS
                           (10 9 8 7 6 5 4 3 2 1)
                           INITSTATE 1 LINKS (DISPLAY (GROUP BMSHRINKFACTOR))
                           FONT
                           (MODERN 10 BOLD)
                           BOX 1 LEFT 278 BOTTOM 18)
                     (TYPE DISPLAY LABEL "" ID BMSHRINKFACTOR BOX 1 LEFT 350 BOTTOM 18 MAXWIDTH 16)
                     (TYPE STATE LABEL "Rotation! " MENUITEMS ("NONE" "LEFT" "RIGHT")
                           LINKS
                           (DISPLAY (GROUP ROTATE))
                           INITSTATE "NONE" FONT (MODERN 10 BOLD)
                           BOX 1 LEFT 382 BOTTOM 18)
                     (TYPE DISPLAY LABEL "" ID ROTATE BOX 1 LEFT 439 BOTTOM 18 MAXWIDTH 37)
                     (TYPE DISPLAY LABEL "Source Filename!: " FONT (MODERN 10 BOLD)
                           SELECTEDFN MT.GET.SOURCEFILENAME BOX 1 LEFT 1 BOTTOM 1)
                     (TYPE EDIT ID SOURCEFILENAME LABEL {DSK}<LISPFILES>IMAGE BOX 1 LEFT 100 BOTTOM 1 
                           MAXWIDTH 379]
          (SETQ MT.DISPLAY.MENUWINDOW (FREEMENU MENU.DESCRIPTION "Microtek Display Menu" 23130 5))
          (FM.CHANGESTATE (FM.GETITEM 'BMSHRINKFACTOR NIL MT.DISPLAY.MENUWINDOW)
                 MT.BMSHRINKFACTOR MT.DISPLAY.MENUWINDOW)
          (OPENW MT.DISPLAY.MENUWINDOW])

(MT.GET.SOURCEFILENAME
  [LAMBDA NIL                                                (* ; "Edited 12-Mar-87 15:41 by rdc")
    (FM.EDITITEM (FM.GETITEM 'SOURCEFILENAME NIL MT.DISPLAY.MENUWINDOW)
           MT.DISPLAY.MENUWINDOW])

(MT.GET.BITMAPNAME
  [LAMBDA NIL                                                (* ; "Edited 12-Mar-87 15:42 by rdc")
    (FM.EDITITEM (FM.GETITEM 'BITMAPNAME NIL MT.DISPLAY.MENUWINDOW)
           MT.DISPLAY.MENUWINDOW])

(MT.CREATEBM
  [LAMBDA NIL                                                (* ; "Edited 19-May-87 16:00 by ")

    (MT.BITMAPCREATE (LISTGET (FM.GETSTATE MT.DISPLAY.MENUWINDOW)
                            'BITMAPNAME)
           (LISTGET (FM.GETSTATE MT.DISPLAY.MENUWINDOW)
                  'SOURCEFILENAME)
           (CADR (MEMBER "Shrinkfactor! " (FM.GETSTATE MT.DISPLAY.MENUWINDOW)))
           (MKATOM (CADR (MEMBER "Rotation! " (FM.GETSTATE MT.DISPLAY.MENUWINDOW])

(MT.BITMAPCREATE
  [LAMBDA (BITMAPNAME INFILENAME BMSHRINKFACTOR ROTATION)
                                                  (* ; 
                                                 "Edited 21-May-87 09:44 by ronald clarke:xsis:xerox")
                                                             (* ; "Edited 19-May-87 11:15 by ")
                                                             (* "edited by: MonkeyBoy: " 
                                                             " 9-Apr-86 14:17")
    (PROG* (SCANFILE COMPRESSION RESOLUTION GREYLEVEL CONTRAST BRIGHTNESS SCANLINES SCANTYPE 
                  BYTESPERSCANLINE SCANDENSITY)
           (SETQ FINISHEDBM (MKATOM BITMAPNAME))
           (if (AND INFILENAME FINISHEDBM)
               then (SETQ SCANFILE (OPENSTREAM INFILENAME 'INPUT))
                    (SETQ COMPRESSION (READ SCANFILE))
                    (SETQ RESOLUTION (READ SCANFILE))
                    (SETQ GREYLEVEL (READ SCANFILE))
                    (SETQ CONTRAST (READ SCANFILE))
                    (SETQ BRIGHTNESS (READ SCANFILE))
                    (SETQ SCANLINES (READ SCANFILE))
                    (SETQ BYTESPERSCANLINE (READ SCANFILE)) 
          
          (* * To Pick up trailing CR)

                    (BIN SCANFILE)
                    (if (EQ COMPRESSION 'NO)
                        then (SET FINISHEDBM (MT.CONVERTIMAGETOBM SCANFILE SCANLINES BYTESPERSCANLINE 
                                                    FINISHEDBM BMSHRINKFACTOR ROTATION))
                             (PUTPROP (MKATOM BITMAPNAME)
                                    'RESOLUTION RESOLUTION)
                      else (MT.PRINT.STATUS "NOT YET IMPLEMENTED")
                           (CLOSEF? SCANFILE))
             else (MT.PRINT.STATUS "ERROR IN BITMAP OR SCANFILE NAME")
                  (CLOSEF? SCANFILE))
           (RETURN FINISHEDBM])

(MT.CONVERTIMAGETOBM
  [LAMBDA (BFILE SCANLINES BYTESPERSCANLINE BMAPNAME SCANNERSHRINKFACTOR ROTATION)
                                                  (* ; 
                                                 "Edited 21-May-87 09:46 by ronald clarke:xsis:xerox")
                                                             (* "edited by: MonkeyBoy: " 
                                                             " 9-Apr-86 15:17")
          
          (* * Returns a bitmap that is shrunken (by factor) image of the data.
          Creates a temporary bitmap that is exact width but only 200 lines max long.
          That is shrunken then blt'ed into the final bitmap)

    (PROG (OFFSET BITWIDTH LINEOFFSET TEMPBM FINALBMOFFSET FINALBMWNAME FINALBMOFFSETFACTOR FINALBM 
                 FINALBMLINES CLINE BMPTR CBYTE SHRINKHEIGHTFACTOR SHRINKWIDTHFACTOR)
          (SETQ OFFSET 0)
          (SETQ BITWIDTH (ITIMES BYTESPERSCANLINE 8))
          (SETQ LINEOFFSET (if (ODDP BYTESPERSCANLINE)
                               then (IPLUS BYTESPERSCANLINE 1)
                             else BYTESPERSCANLINE))
          (SETQ TEMPBM (BITMAPCREATE BITWIDTH 200))
          (SETQ FINALBMOFFSET -1)
          [SETQ FINALBMWNAME (MKATOM (CONCAT BMAPNAME 'WINDOW]
          (SETQ FINALBMOFFSETFACTOR (QUOTIENT 200 SCANNERSHRINKFACTOR))
          (MT.PRINT.STATUS "SETTING UP BITMAP...")
          
          (* * Set up the bmap parameters)

          (SETQ SHRINKHEIGHTFACTOR SCANNERSHRINKFACTOR)
          (SETQ SHRINKWIDTHFACTOR SCANNERSHRINKFACTOR)
          
          (* * Set number of lines in final bitmap)

          (SETQ FINALBMLINES (IPLUS (IQUOTIENT SCANLINES SHRINKHEIGHTFACTOR)
                                    1))
          
          (* * create the final bitmap FACTOR width and FACTOR high)

          (SETQ FINALBM (if (GEQ (ITIMES BITWIDTH SCANLINES)
                                 2000000)
                            then (MT.CREATE.BIG.BM BITWIDTH SCANLINES)
                          else (BITMAPCREATE (QUOTIENT (ITIMES BYTESPERSCANLINE 8)
                                                    SHRINKWIDTHFACTOR)
                                      FINALBMLINES)))
          
          (* * make a window that you can bitblt the image to while you are working...)
          
          (* * now start doing the serious work)

          (MT.PRINT.STATUS "WORKING...")
          (SETQ BMPTR (fetch BITMAPBASE of TEMPBM))
          (for Y from 0 to (SUB1 SCANLINES) do (if (EQ OFFSET 200)
                                                   then 
          
          (* We've done 200 lines, so now lets move it and reset the offset pointers!)

                                                        (MT.PRINT.STATUS "BLT'ING A CHUNK...") 
          
          (* * first reset everything)

                                                        (SETQ BMPTR (fetch BITMAPBASE of TEMPBM))
                                                        (SETQ OFFSET 0) 
          
          (* * set the new offset into the final bitmap DONT forget we are working top 
          down in BMAP)

                                                        (SETQ FINALBMOFFSET (IPLUS FINALBMOFFSET 
                                                                                  FINALBMOFFSETFACTOR
                                                                                   )) 
          
          (* * BITBLT the shrunken bitmap (by SHRINKHEIGHTFACTOR) to the final bitmap and 
          then the finalbitmap to the display window)

                                                        (BITBLT (SHRINKBITMAP TEMPBM 
                                                                       SHRINKWIDTHFACTOR 
                                                                       SHRINKHEIGHTFACTOR)
                                                               0 0 FINALBM 0 (IDIFFERENCE 
                                                                                    FINALBMLINES 
                                                                                    FINALBMOFFSET))
                                                        (MT.PRINT.STATUS "DONE...WORKING..."))
                                               (SETQ CLINE (ITIMES OFFSET LINEOFFSET))
                                               (for X from 0 to (IDIFFERENCE BYTESPERSCANLINE 1)
                                                  do (\PUTBASEBYTE BMPTR (PLUS X CLINE)
                                                            (BIN BFILE)))
                                               (SETQ OFFSET (ADD1 OFFSET)))
          
          (* * Now do the final shrink and blt)

          (MT.PRINT.STATUS " BLT'ING FINAL CHUNK...")
          (SETQ OFFSET (IPLUS (IMOD OFFSET SHRINKHEIGHTFACTOR)
                              (QUOTIENT OFFSET SHRINKHEIGHTFACTOR)))
          (SETQ FINALBMOFFSET (IPLUS FINALBMOFFSET OFFSET))
          (BITBLT (SHRINKBITMAP TEMPBM SHRINKWIDTHFACTOR SHRINKHEIGHTFACTOR)
                 0
                 (IDIFFERENCE FINALBMOFFSETFACTOR OFFSET)
                 FINALBM 0 (IDIFFERENCE FINALBMLINES FINALBMOFFSET))
          (MT.CREATE.DISPLAYWINDOW (if (EQ ROTATION 'LEFT)
                                       then (MT.PRINT.STATUS "..ROTATING BITMAP...PLEASE WAIT")
                                            (SETQ FINALBM (ROTATE.BITMAP.LEFT FINALBM))
                                     elseif (EQ ROTATION 'RIGHT)
                                       then (MT.PRINT.STATUS "..ROTATING BITMAP...PLEASE WAIT")
                                            (SETQ FINALBM (ROTATE.BITMAP.RIGHT FINALBM))
                                     else FINALBM))
          (MT.PRINT.STATUS "DONE")
          (CLOSEF BFILE)
          (CLRPROMPT)
          (RETURN FINALBM])

(MT.CREATE.BIG.BM
  [LAMBDA (WIDTH HEIGHT)                                     (* was%: "14-Jul-86 15:55")
    (LET* ((RASTERWIDTH (IQUOTIENT (IPLUS WIDTH (IDIFFERENCE 16 (IMOD WIDTH 16)))
                               16))
           (TOTALBYTES (ITIMES HEIGHT (ITIMES RASTERWIDTH 2)))
           [NPAGES (COND
                      ((ZEROP (IMOD TOTALBYTES 512))
                       (IQUOTIENT TOTALBYTES 512))
                      (T (ADD1 (IQUOTIENT TOTALBYTES 512]
           (BMPTR (\ALLOCPAGEBLOCK NPAGES))
           (REALLYBIGBM (create BITMAP
                               BITMAPBASE ← BMPTR
                               BITMAPRASTERWIDTH ← RASTERWIDTH
                               BITMAPHEIGHT ← HEIGHT
                               BITMAPWIDTH ← WIDTH
                               BITMAPBITSPERPIXEL ← 1)))
          (BLTSHADE WHITESHADE REALLYBIGBM)
          REALLYBIGBM])

(MT.CREATE.DISPLAYWINDOW
  [LAMBDA (BITMAP)                                           (* ; "Edited 13-Mar-87 15:10 by rdc")
    (PROG (WINDOW)
          (RINGBELLS)
          (MT.PRINT.STATUS "SWEEP OUT WINDOW FOR BITMAP")
          [SETQ WINDOW (CREATEW NIL (LISTGET (FM.GETSTATE MT.DISPLAY.MENUWINDOW)
                                           'BITMAPNAME]
          (WINDOWPROP WINDOW 'SRCBM BITMAP)
          (WINDOWPROP WINDOW 'REPAINTFN (FUNCTION MT.REPAINTWINDOW))
          (WINDOWPROP WINDOW 'RESHAPEFN (FUNCTION MT.RESHAPEWINDOW))
          (WINDOWPROP WINDOW 'SCROLLFN (FUNCTION SCROLLBYREPAINTFN))
          (MT.RESHAPEWINDOW WINDOW)
          (RETURN WINDOW])

(MT.REPAINTWINDOW
  [LAMBDA (WINDOW REGION)                                    (* rdc "11-Jul-86 14:41")
    (MOVETO (WINDOWPROP WINDOW 'BMORIGX)
           (WINDOWPROP WINDOW 'BMORIGY)
           WINDOW)
    (BITBLT (WINDOWPROP WINDOW 'SRCBM)
           0 0 WINDOW])

(MT.RESHAPEWINDOW
  [LAMBDA (WINDOW)                                           (* rdc "11-Jul-86 14:18")
    (PROG NIL
          (DSPRESET WINDOW)
          (WINDOWPROP WINDOW 'BMORIGX (DSPXPOSITION NIL WINDOW))
          (WINDOWPROP WINDOW 'BMORIGY (DSPYPOSITION NIL WINDOW))
          (MT.REPAINTWINDOW WINDOW)
          (WINDOWPROP WINDOW 'EXTENT (CREATEREGION 0 0 (BITMAPWIDTH (WINDOWPROP WINDOW 'SRCBM))
                                            (BITMAPHEIGHT (WINDOWPROP WINDOW 'SRCBM])
)

(ADDTOVAR BackgroundMenuCommands ("MicrotekScanner" (MT.INIT)
                                        "Open Microtek Scanner Command and Display windows, initilalize RS232 port and verifies Microtek Scanner is ready"
                                        ))

(RPAQQ BackgroundMenu NIL)

(RPAQQ MT.ICON #*(50 50)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOH@@@@@@@@@@H@@@@H@@@@@@@@@@H@@@@H@@@@@@@@@@H@@@@OOOOL@@@@@AH@@@@H@@@L@@@@@BH@@@@H@@AD@@@@@DH@@@@H@@BD@@@@@HH@@@@H@@DD@@@@A@H@@@@H@@HD@@@@B@H@@@@H@A@D@@@@DCH@@@@N@B@D@@@@HCOOOOON@D@D@@@A@@@@@@@@@H@D@@@B@@@@@@@@A@@D@@@GOOOOOOOON@@H@@@D@@@@@@@@B@A@@@@D@@@@@@@@B@B@@@@D@@@@@@@@B@D@@@@DOOOOOOOOB@H@@@@DH@@@@@@ABA@@@@@DH@@@@@@ABB@@@@@DH@@@@@@ABD@@@@@DH@@@@@@ABH@@@@@DH@@@@@@AC@@@@@@GOOOOOOOON@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
)

(RPAQQ MT.ICON.MASK #*(50 50)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOH@@@@@@@@@@OOOOOH@@@@@@@@@@OOOOOH@@@@@@@@@@OOOOOOOOOL@@@@@AOOOOOOOOOL@@@@@COOOOOOOOOL@@@@@GOOOOOOOOOL@@@@@OOOOOOOOOOL@@@@AOOOOOOOOOOL@@@@COOOOOOOOOOL@@@@GOOOOOOOOOOL@@@@OOOOOOOOOOOL@@@AOOOOOOOOOOOL@@@COOOOOOOOOOOL@@@GOOOOOOOOOOOH@@@GOOOOOOOOOOO@@@@GOOOOOOOOOON@@@@GOOOOOOOOOOL@@@@GOOOOOOOOOOH@@@@GOOOOOOOOOO@@@@@GOOOOOOOOON@@@@@GOOOOOOOOOL@@@@@GOOOOOOOOOH@@@@@GOOOOOOOOO@@@@@@GOOOOOOOON@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
)

(RPAQQ BRIGHTBAR #*(128 10)OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@AD@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@CF@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@GG@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@OGH@@@@@@@@@@@@@AH@@@@@@@@@@@@@@GG@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@CF@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@AD@@@@@@@@@@@@@@AOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
)

(RPAQQ CONTRASTBAR #*(128 10)OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@AD@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@CF@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@GG@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@OGH@@@@@@@@@@@@@AH@@@@@@@@@@@@@@GG@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@CF@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@AD@@@@@@@@@@@@@@AOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
)

(RPAQQ INITIALBRIGHTBAR #*(128 10)OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOH@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
)

(RPAQQ INITIALCONTRASTBAR #*(128 10)OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOH@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AH@@@@@@@@@@@@@@@H@@@@@@@@@@@@@@AOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
)

(RPAQQ LEFTARROW #*(10 10)@H@@AH@@CH@@GOL@OOL@OOL@GOL@CH@@AH@@@H@@)

(RPAQQ MANCURSOR #*(9 9)@H@@AL@@CN@@GO@@OOH@GO@@CN@@AL@@@@@@)

(RPAQQ RIGHTARROW #*(10 10)@D@@@F@@@G@@OOH@OOL@OOL@OOH@@G@@@F@@@D@@)

(RPAQQ MT.POINTER #*(16 16)L@@@O@@@OL@@OO@@OOL@OOO@OOOLOOOOOOOOOOOLOOO@OOL@OO@@OL@@O@@@L@@@)

(RPAQ? MT.BAUDRATE 19200)

(RPAQ? MT.RS232C.FRAME.TIMEOUT 2)

(RPAQ? MT.DISPLAYFRAME 'YES)

(RPAQ? MT.PAPERLENGTH 4)

(RPAQ? MT.REDUCTION 0)

(RPAQ? MT.CONTRAST 0)

(RPAQ? MT.BRIGHTNESS 0)

(RPAQ? MT.GREYLEVEL 0)

(RPAQ? MT.DATACOMPRESSION 'NO)

(RPAQ? MT.BACKGROUND 'HALFTONE)

(RPAQ? MT.WINDOW 'LINEART)

(RPAQ? MT.FRAME '(0 0 40 24))

(RPAQ? MT.FRAME.BOX '(0 460 200 120))

(RPAQ? MT.TEXTW1 '(0 0 0 0))

(RPAQ? MT.TEXTW2 '(0 0 0 0))

(RPAQ? MT.TEXTW3 '(0 0 0 0))

(RPAQ? MT.TEXTW4 '(0 0 0 0))

(RPAQ? MT.TEXTW1BOX '(0 0 0 0))

(RPAQ? MT.TEXTW2BOX '(0 0 0 0))

(RPAQ? MT.TEXTW3BOX '(0 0 0 0))

(RPAQ? MT.TEXTW4BOX '(0 0 0 0))

(RPAQ? MT.HALFTONEW1 '(0 0 0 0))

(RPAQ? MT.HALFTONEW2 '(0 0 0 0))

(RPAQ? MT.HALFTONEW3 '(0 0 0 0))

(RPAQ? MT.HALFTONEW4 '(0 0 0 0))

(RPAQ? MT.HALFTONEW1BOX '(0 0 0 0))

(RPAQ? MT.HALFTONEW2BOX '(0 0 0 0))

(RPAQ? MT.HALFTONEW3BOX '(0 0 0 0))

(RPAQ? MT.HALFTONEW4BOX '(0 0 0 0))

(RPAQ? MT.OUTSTREAM NIL)

(RPAQ? MT.INSTREAM NIL)

(RPAQ? MT.BMSHRINKFACTOR 1)
(DECLARE%: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS MT.RS232C.FRAME.TIMEOUT MT.STATUSWINDOW MT.HEIGHTRULER MT.GRID MT.PAPERLENGTH 
       MT.REDUCTION MT.BRIGHTNESS MT.CONTRAST MT.GREYLEVEL MT.DATACOMPRESSION MT.BACKGROUND MT.WINDOW 
       MT.HEIGHTWINDOW MT.FRAME MT.FRAME.BOX MT.TEXTW1 MT.TEXTW2 MT.TEXTW3 MT.TEXTW4 MT.HALFTONEW1 
       MT.HALFTONEW2 MT.HALFTONEW3 MT.HALFTONEW4 MT.OUTSTREAM MT.INSTREAM BRIGHTBAR CONTRASTBAR 
       LEFTARROW MANCURSOR RIGHTARROW)
)
(PUTPROPS MICROTEK COPYRIGHT ("XEROX Corporation" 1987))
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (3948 52109 (MT.INIT 3958 . 6379) (MT.SHRINKFN 6381 . 6785) (MICROTEKSCANNER 6787 . 8723
) (RULERX 8725 . 8996) (RULEX# 8998 . 9328) (RULERY 9330 . 9978) (RULEY# 9980 . 10310) (MT.GETLENGTH 
10312 . 11183) (MT.CURSOR.IN 11185 . 11345) (MT.CURSOR.OUT 11347 . 11481) (MT.PRINT.STATUS 11483 . 
11672) (MT.CONTROL.MENU 11674 . 23328) (MT.CHANGE.BRIGHTBAR 23330 . 23852) (MT.RAISEBRIGHTNESS 23854
 . 24248) (MT.LOWERBRIGHTNESS 24250 . 24657) (MT.CHANGE.CONTRASTBAR 24659 . 25186) (MT.RAISECONTRAST 
25188 . 25572) (MT.LOWERCONTRAST 25574 . 25971) (MT.SELECT.BACKGROUND 25973 . 32755) (MT.GETTRANSFRAME
 32757 . 35640) (MT.GETWINDOW1 35642 . 38878) (MT.GETWINDOW2 38880 . 42116) (MT.GETWINDOW3 42118 . 
45354) (MT.GETWINDOW4 45356 . 48592) (MT.UPDATE.HTWINDOWS 48594 . 51007) (MT.DRAWAREABOX 51009 . 52107
)) (52140 72755 (MT.COMMAND.MENU 52150 . 53561) (MT.GET.OUTFILENAME 53563 . 53797) (MT.SCAN 53799 . 
53975) (MT.START.SCANNING 53977 . 58372) (MT.SETUPSCANFILE 58374 . 59374) (MT.SEND.SCAN.PARAMETERS 
59376 . 64631) (MT.SENDCOMMAND 64633 . 66860) (MT.COMPUTECHECKSUM 66862 . 68460) (MT.PRINT.ERROR.MSG 
68462 . 70006) (MT.SENDACK 70008 . 70176) (MT.SENDNAK 70178 . 70347) (MT.STOP.SCANNING 70349 . 70617) 
(MT.RESET 70619 . 71964) (MT.PAGEMAP 71966 . 72195) (MT.QUIT 72197 . 72753)) (72814 86456 (
MT.DISPLAY.MENU 72824 . 75104) (MT.GET.SOURCEFILENAME 75106 . 75346) (MT.GET.BITMAPNAME 75348 . 75580)
 (MT.CREATEBM 75582 . 76064) (MT.BITMAPCREATE 76066 . 78012) (MT.CONVERTIMAGETOBM 78014 . 84049) (
MT.CREATE.BIG.BM 84051 . 84966) (MT.CREATE.DISPLAYWINDOW 84968 . 85661) (MT.REPAINTWINDOW 85663 . 
85942) (MT.RESHAPEWINDOW 85944 . 86454)))))
STOP