REM > Territories:Utilities.CharsTable

ONERRORONERROROFF:ERROR0,REPORT$+" ("+STR$ERL+"/&"+STR$~ERR+")":END

DIM lower% 255, upper% 255, control% 255, plain% 255, value% 255, properties% 32 * 11
PROCTB_Init

ONERRORONERROROFF:PROCTB_Quit:ERROR0,REPORT$+" ("+STR$ERL+"/&"+STR$~ERR+")":END

INPUT "Character set: "c$

f% = OPENIN("Territories:Tables." + c$ + ".!Chars")
IF f% = 0 THEN ERROR 1, "Could not open file Territories:Tables." + c$ + ".!Chars‘"

ONERRORONERROROFF:CLOSE#f%:PROCTB_Quit:ERROR0,REPORT$+" ("+STR$ERL+"/&"+STR$~ERR+")":END

PROCTB_File("Territories:Tables." + c$ + ".!Chars")

 FOR b% = 0 TO 32 * 11 STEP 4
  properties%!b% = 0
 NEXT

l% = 0
err% = FALSE

 REPEAT
  l$ = GET$#f%
  l% += 1
 UNTIL LEFT$(l$, 1) <> "#"

 FOR c% = 0 TO 255
  IF FNchar(FNcut(l$)) <> c% THEN PROCTB_Throwback(l%, 1, "Wrong or missing character, should be "+STR$c%): err% = TRUE

  lower%?c% = FNchar(FNcut(l$))
  upper%?c% = FNchar(FNcut(l$))
  control%?c% = FNchar(FNcut(l$))
  plain%?c% = FNchar(FNcut(l$))
  value%?c% = FNchar(FNcut(l$))

  IF LENl$ <> 11 THEN PROCTB_Throwback(l%, 1, "Properties wrong or missing"): err% = TRUE

   FOR p% = 0 TO 10
    IF LEFT$(l$, 1) = "1" THEN properties%?(32 * p% + (c% DIV 8)) = properties%?(32 * p% + (c% DIV 8)) OR (1 << (c% MOD 8))
    l$ = MID$(l$, 2)
   NEXT

  IF EOF#f% AND c% <> 255 THEN PROCTB_Throwback(l%, 1, "Unexpected end of file"): err% = TRUE: GOTO 520

  l$ = GET$#f%
  l% += 1
 NEXT

CLOSE#f%
PROCTB_Quit

IF err% THEN PRINT"Failed due to errors": END

ONERRORONERROROFF:ERROR0,REPORT$+" ("+STR$ERL+"/&"+STR$~ERR+")":END

SYS"OS_File", 10, "Territories:Tables." + c$ + ".LowerCase", &FFD,, lower%, lower% + 256
SYS"OS_File", 10, "Territories:Tables." + c$ + ".UpperCase", &FFD,, upper%, upper% + 256
SYS"OS_File", 10, "Territories:Tables." + c$ + ".Control", &FFD,, control%, control% + 256
SYS"OS_File", 10, "Territories:Tables." + c$ + ".Plain", &FFD,, plain%, plain% + 256
SYS"OS_File", 10, "Territories:Tables." + c$ + ".Value", &FFD,, value%, value% + 256
SYS"OS_File", 10, "Territories:Tables." + c$ + ".Property", &FFD,, properties%, properties% + 32 * 11

END

REM ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜

DEF FNcut(RETURN o$)
LOCAL p$
p$ = LEFT$(o$, INSTR(o$, CHR$9) - 1)
o$ = MID$(o$, INSTR(o$, CHR$9) + 1)
=p$


DEF FNchar(c$)
IF LENc$ = 1 THEN =ASCc$
IF LEFT$(c$, 1) = "." THEN =VAL(MID$(c$, 2))
PROCTB_Throwback(l%, 1, "Character " + c$ + "‘ not understood")
err% = TRUE
=0

REM ˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜

DEF PROCTB_Init
TB_Started% = FALSE
SYS"XOS_CLI", "RMEnsure DDEUtils 0.00 RMLoad System:Modules.DDEUtils"
SYS"XOS_SWINumberFromString",, "DDEUtils_ThrowbackStart" TO ;f%
IF f% AND 1 THEN TB_DDE% = FALSE ELSE TB_DDE% = TRUE
ENDPROC

DEF PROCTB_File(File$)
TB_File$ = File$
ENDPROC

DEF PROCTB_Throwback(Line%, Severity%, Message$)
 IF TB_DDE% THEN
   IF NOT TB_Started% THEN
    SYS"DDEUtils_ThrowbackStart"
    TB_Started% = TRUE
   ENDIF
  SYS"DDEUtils_ThrowbackSend", 1,, TB_File$, Line%, Severity%, Message$
 ELSE
   IF NOT TB_Started% THEN
    PRINT "Errors in file " + TB_File$ + "‘:"
    TB_Started% = TRUE
   ENDIF
  PRINT "Line " + STR$Line% + ": ";
  IF Severity% = 0 THEN PRINT "Warning: "; ELSE PRINT "Error: ";
  PRINT Message$
 ENDIF
ENDPROC

DEF PROCTB_Quit
IF TB_DDE% AND TB_Started% THEN SYS"DDEUtils_ThrowbackEnd"
ENDPROC