begin ; !DD11

!Convert data in files DD11%.RAW into more palatable form

string (15)array  name(0:255)

byteintegerarray  p('A':'F',1:9,'A':'V',1:2)

integer  group,slot,pin,side, sym,signal

string (15)signal name

routine  read signal name
  signal name=""
  cycle 
    readsymbol(sym); exitif  sym=' '
    signal  14,0,nl if  sym=nl
    sym=sym-32 if  'a'<=sym<='z'
    signal name=signal name.tostring(sym)
  repeat 
  signal=0
  cycle 
    signal=signal+1; signal  15,0,256 if  signal=256
    exitif  name(signal)=signal name
    if  name(signal)="" start 
      name(signal)=signal name
      name(signal+1)="" unless  signal=255
      exit 
    finish 
  repeat 
end 

routine  read pin name
  readsymbol(group); group=group-32 if  'a'<=group<='f'
  signal  15,1,group unless  'A'<=group<='F'
  sym=nextsymbol
  if  sym='!' or  sym='#' or  sym='*' start 
    readsymbol(slot)
  finishelsestart 
    read(slot)
    signal  15,2,slot unless  1<=slot<=9
  finish 
  readsymbol(pin); pin=pin-32 if  'a'<=pin<='v'
  signal  15,3,pin if  pin<'A' or  pin>'V' c 
  or  pin='G' or  pin='I' or  pin='O' or  pin='Q'
  read(side)
  signal  15,4,side unless  side=1 or  side=2
  readsymbol(sym)
end 

routine  store information
  routine  do(integer  slot)
  byteintegername  q
    q==p(group,slot,pin,side)
    q=signal andreturnif  q=0
    printsymbol(group); printsymbol(slot+'0')
    printsymbol(pin);   printsymbol(side+'0'); printstring(": ")
    printstring(name(signal)); printstring(" replaces ")
    printstring(name(q)); newline; q=signal
  end 
  if  1<=slot<=9 start 
    do(slot)
  finishelseif  slot='#' start 
    do(1); do(9)
  finishelsestart 
    do(1) unless  slot='*'
    do(9) unless  slot='*'
    do(slot) for  slot=2,1,8
  finish 
end 

routine  print slot(integer  slot)
  printstring("
  Slot "); printsymbol(slot+'0'); newline
  for  group='A',1,'F' cycle 
    newline
    for  pin='A',1,'V' cycle 
    unless  pin='I' or  pin='G' or  pin='O' or  pin='Q' start 
      signal name=name(p(group,slot,pin,1))
      printsymbol(group); printsymbol(pin); printstring("1  ")
      printstring(signal name); spaces(20-length(signal name))
      printsymbol(group); printsymbol(pin); printstring("2  ")
      printstring(name(p(group,slot,pin,2))); newline
    finish 
    repeat 
  repeat 
end 

routine  compare(integer  slota,slotb)
integer  a,b,ok
  ok=1
  printstring("Comparing slots "); printsymbol(slota+'0')
  printstring(" and "); printsymbol(slotb+'0'); printsymbol(':')
  for  group='A',1,'F' cycle 
    for  pin='A',1,'V' cycle 
      for  side=1,1,2 cycle 
        a=p(group,slota,pin,side)
        b=p(group,slotb,pin,side)
        if  a#b start 
          newline unless  ok=0; ok=0
          printsymbol(group); printsymbol(slota+'0')
          printsymbol(pin); printsymbol(side+'0'); space
          printstring(name(a)); newline
          printsymbol(group); printsymbol(slotb+'0')
          printsymbol(pin); printsymbol(side+'0'); space
          printstring(name(b)); newline; newline
        finish 
      repeat 
    repeat 
  repeat 
  if  ok#0 start 
    printstring(" identical
")
  finish 
end 

onevent  9 start 
  selectoutput(1)
  print slot(1); print slot(2); print slot(9)
  selectoutput(2)
  compare(2,slot) for  slot=3,1,8
  compare(1,2); compare(1,9)
  stop 
finish 

selectinput(1); selectoutput(1)
name(0)=" unassigned"
name(1)=""
for  group='A',1,'F' cycle 
  for  slot=1,1,9 cycle 
    for  pin='A',1,'V' cycle 
      p(group,slot,pin,1)=0; p(group,slot,pin,2)=0
    repeat 
  repeat 
repeat 
cycle 
  read signal name
  read pin name and  store information until  sym=nl
repeat 

endofprogram