REM >MRtoEARS 1.20
      REM Create EARS import list from Pickwick PDF marked register
      REM
      REM v1.00 JJR: Original, using pdf2txt
      REM v1.20 JGH: Updated to use free pdftotext and newer marked registers
      :
      cmd$=@cmd$:progpath$=@dir$:inpath$="":outpath$=""
      ON ERROR:PROC_Err:PROCEnd
      IFINSTR(cmd$,"-?"):PRINT"Syntax: MRtoEARS (<inpath>)":PROCEnd:END
      IFcmd$<>"":inpath$=cmd$:outpath$=inpath$
      in%=OPENIN(inpath$+"MRtoEARS.ini"):IFin%=0:in%=OPENIN(progpath$+"MRtoEARS.ini")
      IF in% THEN
        REPEAT
          A$=GET$#in%
          IFLEFT$(FNuc(A$),7)="INPATH=":inpath$=MID$(A$,8):outpath$=inpath$
          IFLEFT$(FNuc(A$),8)="OUTPATH=":outpath$=MID$(A$,9)
          IFLEFT$(FNuc(A$),8)="PROGPATH=":progpath$=MID$(A$,9)
        UNTILEOF#in%:CLOSE#in%:in%=0
      ENDIF
      :
      list%=OPENIN(inpath$+"FileList.txt"):IF list%=0:PRINT"Cannot find file 'FileList.txt'":PROCEnd
      crlf$=CHR$13+CHR$10:temp$="temp.tmp":ext$="txt"
      out%=OPENOUT(outpath$+"VOTED."+ext$):IF out%=0 PRINT"Cannot open file 'VOTED.";ext$"' for output, skipping file":PROCEnd
      pd$=""
      REPEAT
        PROCProcess(GET$#list%)
      UNTILEOF#list%
      PROCCloseAll
      PROCEnd
      END
      :
      DEF PROC_Err
      IF ERR=17 PRINT'"Program terminated by user." ELSE PRINT 'REPORT$" at line ";ERL
      PROCCloseAll
      ENDPROC
      :
      DEFPROCCloseAll
      in%=in%     :IF in%   :A%=in%   :in%=0   :CLOSE#A%
      out%=out%   :IF out%  :A%=out%  :out%=0  :CLOSE#A%
      list%=list% :IF list% :A%=list% :list%=0 :CLOSE#A%
      ENDPROC
      :
      DEFPROCEnd
      PROCCloseAll
      PRINT"Press the SPACE BAR to exit.";
      REPEAT UNTIL INKEY(0)=-1:IF GET
      QUIT
      ENDPROC
      :
      DEF PROCProcess(in$)
      IFin$="":ENDPROC
      in% =OPENIN(inpath$+in$):IF in%=0  PRINT"Cannot open file '";in$"', skipping file":ENDPROC
      CLOSE#in%:in%=0
      PRINT CHR$13;"Converting ";in$"...";
      OSCLI progpath$+"pdftotext "+inpath$+in$+" "+outpath$+temp$
      in% =OPENIN(outpath$+temp$):IF in%=0  PRINT"Cannot open temporary file '";temp$"', skipping file":ENDPROC
      PRINT CHR$13;"Processing ";in$"..."
      REPEAT
        a$=GET$#in%
        REPEAT:PROCScan:UNTILa$=""
      UNTILEOF#in%
      CLOSE#in%:in%=0
      OSCLI"Delete "+outpath$+temp$
      PRINTCHR$13;SPC20;CHR$13;
      ENDPROC
      :
      DEFPROCScan
      a$=FNuc(a$)
      IFINSTR(a$,"POLLING DISTRICT"):pd$=RIGHT$(a$,2):a$="":ENDPROC
      A%=INSTR(a$,"VOTED"):IFA%=0:a$="":ENDPROC       :REM Look for 'VOTED'
      a$=MID$(a$,A%+5)                                :REM Skip past 'VOTED'
      WHILE LEFT$(a$,1)=" ":a$=MID$(a$,2):ENDWHILE    :REM Skip past spaces
      IFVALa$=0:a$="":ENDPROC                         :REM Next text not a number, exit
      A%=INSTR(a$," "):IFA%=0:a$="":ENDPROC           :REM If no following space, exit
      num$=LEFT$(a$,A%-1):a$=MID$(a$,A%+1)            :REM Isolate polling number
      thispd$=pd$:A%=INSTR(num$,":")                  :REM PD:NUM or just NUM?
      IFA%:thispd$=LEFT$(a$,A%-1):num$=MID$(a$,A%+1)  :REM Use PD from PD:NUM if there
      IFVALnum$=0:ENDPROC                             :REM Nonvalid elector number
      IFthispd$<"1" OR thispd$>"Z":ENDPROC            :REM Nonvalid polling district
      IFMID$(pd$,2,1)<"A" OR MID$(pd$,2,1)>"Z":ENDPROC:REM Nonvalid polling district
      PROCWrVoter(out%,pd$+num$)
      PRINTCHR$13;pd$;":";num$;SPC5;
      ENDPROC
      :
      DEF PROCWrVoter(h%,a$)
      BPUT#h%,LEFT$(a$,2)+":"+MID$(a$,3)+crlf$;
      ENDPROC
      :
      DEFFNuc(A$):IFA$="":=""
      FOR A%=1 TO LEN A$:IFMID$(A$,A%,1)>"_":A$=LEFT$(A$,A%-1)+CHR$(ASCMID$(A$,A%,1)AND&DF)+MID$(A$,A%+1)
      NEXT:=A$