! File of externals followed by a main program.

recordformat rf ( integer i, real r, integer rf)  ;    ! Are record format vars in a sub-scope?  Or is it just that formats are in a different name space?

! owns and externals are simpler declarations
externalinteger xi1
externalintegername xin1
externalreal xr1
externalinteger xi2,xi3
externalreal xcr1 = 3.1415
externalrealarray xra1(0:9)
externalrealarrayname xran1
externallongreal xclr1 = 3.1415
externallongrealarray xlra1(0:9)
externallongrealarrayname xlran1
externalintegernamearray xina1(0:9)
externalintegernamearrayname xinan1
externalstring(82) xs1
externalstring(82)name xsn1
externalstring(82)array xsa1(4:7)
externalstring(82)arrayname xsan1
externalstring(82)namearray xsna1(4:7)
externalstring(82)namearrayname xsnan1
externalrecord (rf) xrec1
externalrecord (rf) name xrecn1
externalrecord (rf) array xreca1(2:3)
externalrecord (rf) array name xrecan1
externalrecord (rf) name array xrecna1(2:3)
externalrecord (rf) name array name xrecnan1

externalintegerfn ifn1
  result = xi1
end
externalintegermap imap1
  result == xi1
end
externalroutine rt1
  integer i1
  routine rt1
  end
end
externalpredicate test1
  true
end
  
begin
  integermapspec imap1
  integer i1
  integername in1
  shortinteger si1
  shortintegername sin1
  byteinteger bi1
  byteintegername bin1
  real r1
  realslong
  real qr1
  realsnormal
  constreal cr1 = 3.1415
  longreal lr1
  constlongreal clr1 = 3.1415
  integerfn ifn1
    result = i1
  end
  integermap imap1
    result == i1
  end
  routine rt1
    integer i1
    integer local1
    routine rt1
      integer local1
      local1 = 1
      i1 = 1
    end
    local1 = 2
    i1 = 2
  end
  predicate test1
    false
  end
  realarray ra1, ra1b(0:9), ra2, ra2b(10:19)
  realarrayname ran1, ran2
  longrealarray lra1, lra1b(0:9), lra2, lra2b(10:19)
  longrealarrayname lran1, lran2
  integernamearray ina1, ina1b(0:9), ina2, ina2b(10:19)
  integernamearrayname inan1, inan2
  string(82) s1, s2
  string(82)name sn1, sn2
  string(82)array sa1, sa1b(4:7), sa2, sa2b(9:10), sa3(1:100)
  string(82)arrayname san1, san2, san3
  string(82)namearray sna1, sna2(4:7), sna3(1:2)
  string(82)namearrayname snan1, snan2
  record (rf) rec1, rec2
  record (rf) name recn1, recn2
  record (rf) array reca1,reca2(2:3),reca3(4:5)
  record (rf) array name recan1,recan2
  record (rf) name array recna1,recna2(2:3),recna3(1:2)
  record (rf) name array name recnan1,recnan2

  ! owns and externals are simpler declarations
  owninteger oi1
  ownintegername oin1
  ownreal or1
  ownlongreal olr1
  owninteger oi2,oi3
  ownreal ocr1 = 3.1415
  ownlongreal oclr1 = 3.1415
  ownrealarray ora1(0:9)
  ownrealarrayname oran1
  ownlongrealarray olra1(0:9)
  ownlongrealarrayname olran1
  ownintegernamearray oina1(0:9)
  ownintegernamearrayname oinan1
  ownstring(82) os1
  ownstring(82)name osn1
  ownstring(82)array osa1(4:7)
  ownstring(82)arrayname osan1
  ownstring(82)namearray osna1(4:7)
  ownstring(82)namearrayname osnan1
  ownrecord (rf) orec1
  ownrecord (rf) name orecn1
  ownrecord (rf) array oreca1(2:3)
  ownrecord (rf) array name orecan1
  ownrecord (rf) name array orecna1(2:3)
  ownrecord (rf) name array name orecnan1

  switch sw1(0:255), sw2('a':'z')

  integer array ia3, ia4(1:10), ia5(2:11,0:1,0:2)

  integernamearray in3a1(2:11,0:1,0:2)

  i1 = 1

  !!!!!!!!!!!!!!!!!!!
  
  xi1 = 1
  xin1 == xi1
  xin1 = 1
  xr1 = 3.1
  xi2 = xi3
  xcr1 = 3.1415
  xra1(5) = xcr1
  xran1 == xra1
  xclr1 = 3.1415
  xlra1(2) = 3.1
  xlran1 == xlra1
  xlran1(2) = 3.2
  xina1(9) == xi1
  xinan1 == xina1

endofprogram