%begin
   {----------------------------}
   {                            }
   { Motorola M68000 Assembler. }
   {                            }
   { Copyright M.R.King, 1984.  }
   { All rights reserved.       }
   {                            }
   {----------------------------}

%option "-nocheck-nodiag"
%own %string(255) copyright = %c
"Motorola M68000 Assembler. Copyright M.R.King, 1984. All rights reserved."

   %constant %integer max names     = 2048,
                      max hash      = 4091,
                      max mac lev   = 15,
                      max cond      = 15,
                      max faults    = 32,
                      max text      = 16384,
                      max include   = 7
   %constant %string(31) program title = " Motorola M68000 Assembler "

!------------------------------------------------------------------------------

   %routine open files;
      %integer i
      %byte %integer sym
      %string(255) %name file
      %string(255) params, source, list, object, dummy

   !---------------------------------------------------------------------------

      %predicate matches(%string(255) source, pattern,
                      %integer min, %integer %name i)
         %integer l
         l = length(pattern)
         %if length(pattern)>=length(source) %start
            l = length(source)
         %else
            l = length(pattern)
         %finish
         %for i = 1, 1, l %cycle
            %unless charno(source, i)=charno(pattern, i) %start
               %if 'a'<=charno(source, i)<='z' %start
                  %false
               %finish %else %if i<=min %start
                   %false
               %else
                  %true
               %finish
            %finish
         %repeat
         i = i+1
         %false %if i<=min
         %true
      %end
   !---------------------------------------------------------------------------

      %string(255) %function lc(%string(255) source)
         %string(255) result
         %integer i

         result = ""
         %for i = 1, 1, length(source) %cycle
            %if 'A'<=charno(source, i)&127<='Z' %start
               result = result.tostring((charno(source, i)&127)-'A'+'a')
            %else
               result = result.tostring(charno(source, i)&127)
            %finish
         %repeat
         %result = result
      %end
   !---------------------------------------------------------------------------

      %predicate is typed(%string(255) source, %string(255)%name file)
         %string(255) directory

         %for i = 1, 1, length(source) %cycle
            %if charno(source, i)='.' %start
               file = substring(source, 1, i-1)
               %true
            %finish
         %repeat
         file = source
         %false
      %end
   !---------------------------------------------------------------------------

      %on %event 9 %start
         select output(0)
         print string(event_message{source." does not exist."})
         new line
         %stop
      %finish
      params = lc(cliparam)
!     params = ""
!     select input(0)
!     read symbol(sym)
!     params = params.to string(sym) %and read symbol(sym) %while sym#nl
!     params = lc(params)
      source = ""
      list = ".n"
      object = ""
      dummy = ""
      %cycle
         i = 1
         i = i+1 %while i<=length(params) %and charno(params, i)=' '
         %exit %if i>length(params)
         params = substring(params, i, length(params))
         %if charno(params, 1)='/' %or charno(params, 1)='-' %start
            params = substring(params, 2, length(params))
            %if matches(params, "list", 1, i) %start
               list = ""
               file == list
            %finish %else %if matches(params, "object", 1, i) %start
                object = ""
               file == object
            %finish %else %if matches(params, "nolist", 3, i) %start
               list = ".n"
               file == dummy
            %finish %else %if matches(params, "noobject", 3, i) %start
               object = ".n"
               file == dummy
            %else
               i = 1
               file == dummy
            %finish
            %exit %if i>length(params)
            params = substring(params, i, length(params))
            %continue %unless charno(params, 1)='='
            %if length(params)>1 %start
               params = substring(params, 2, length(params))
            %else
               params = ""
            %finish
         %else
            file == source
         %finish
         i = 1
         i = i+1 %while i<=length(params) %and charno(params, i)#' ' %and %c
                            charno(params, i)#'/' %and charno(params, i)#'-'
         file = substring(params, 1, i-1) %if i>1
         %exit %if i>length(params)
         params = substring(params, i, length(params))
      %repeat

      %if source="" %start
         select output(0)
         print string("No source file specified.")
         newline
         %stop
      %finish

      source = source.".asm" %unless is typed(source, params)

      list   = params %if list=""
      object = params %if object=""
      list = list.".lis" %unless is typed(list, dummy)
      object = object.".mob" %unless is typed(object, dummy)

      open input(1, source)
      open input(2, "assem:m68000.def")
      open output(1, object)
      open output(2, list)
   %end
!------------------------------------------------------------------------------

   %predicate open include file(%integer stream, %string(255) file)
   %string(255)dummy
      %on %event 9 %start
         %false
      %finish

      open input(stream, file)
      select input(stream)
      stream = next symbol
      %true
   %end
!------------------------------------------------------------------------------

   %include "assem:m680X0.inc"
%end %of %program
