' tb-screen: 80x25
' tb-tempdir
' ISAM (Spec isam-datenbank, Anforderungen "Pufferverwaltung mit benanntem
' Fehler" und "Vergleichsreihenfolge fuer Indizes"): SETMEM aendert die
' Puffergrenze und liefert die verfuegbare Groesse, ein Ueberschreiten meldet
' 89; die Indexordnung stimmt mit dem Stringvergleich des Dialekts ueberein.
' Laeuft in einem temporaeren Verzeichnis.
TYPE Wort
    Text AS STRING * 6
END TYPE
DIM w AS Wort

ON ERROR GOTO Handler
OPEN "worte.isam" FOR ISAM Wort "Worte" AS #1
CREATEINDEX #1, "NachText", 0, "Text"
SETINDEX #1, "NachText"

' --- 9.4: Gross-/Kleinschreibung und Zeichen jenseits von ASCII ---
' Eingefuegt in willkuerlicher Reihenfolge; der Index ordnet nach
' Unicode-Codepoints, also genau wie der Vergleichsoperator des Dialekts.
w.Text = "birne"
INSERT #1, w
w.Text = "Apfel"
INSERT #1, w
w.Text = "Äpfel"
INSERT #1, w
w.Text = "apfel"
INSERT #1, w
w.Text = "Birne"
INSERT #1, w

PRINT "Indexordnung:";
DIM voriges AS STRING
voriges = ""
passt% = -1
MOVEFIRST #1
DO WHILE NOT EOF(1)
    RETRIEVE #1, w
    PRINT " "; RTRIM$(w.Text);
    ' Jedes Paar in Folge muss auch dem Operator < genuegen.
    IF voriges <> "" THEN
        IF NOT (voriges < w.Text) THEN passt% = 0
    END IF
    voriges = w.Text
    MOVENEXT #1
LOOP
PRINT
PRINT "Indexordnung passt zu <:"; passt%

' --- 9.2: SETMEM liefert die verfuegbare Groesse ---
frei& = SETMEM(0)
PRINT "Puffer vorgabe:"; frei&
frei& = SETMEM(-1024)
PRINT "nach SETMEM(-1024):"; frei&
frei& = SETMEM(1024)
PRINT "nach SETMEM(1024):"; frei&

' --- 9.2: unter die Satzgroesse gesenkt meldet ein INSERT 89 ---
frei& = SETMEM(-65530)
PRINT "knapper Puffer:"; frei&
w.Text = "zuviel"
INSERT #1, w

' Wieder aufgemacht, geht es weiter.
frei& = SETMEM(65530)
w.Text = "zebra"
INSERT #1, w
PRINT "nach Aufstocken Saetze:"; LOF(1)

CLOSE #1
PRINT "fertig"
END

Handler:
PRINT "ERR="; ERR
RESUME NEXT
