File$ = @usr$ + "TestFile.dat"
DIM Detail{ Category{ Main$ }, Link{ Next% } }
DIM Node{} = Detail{}
DIM ListPtr{ Details{ Used%, Free% } }
PROC_CREATE_DATA_FILE
F% = OPENIN(File$)
WHILE NOT EOF#F%
PROC_RECORD_INPUT(F%, Detail{})
PRINT '"NEW DETAIL VALUE = """; Detail.Category.Main$; """"
PrevPtr% = 0
ThisPtr% = ListPtr.Details.Used%
C% = 0
WHILE (ThisPtr% <> 0) AND (Detail.Category.Main$ > FN_GET_ITEM(Node{}, ThisPtr%))
C% += 1 : PRINT "LOOP = ";C% : IF C% > 4 THEN STOP
PrevPtr% = ThisPtr%
ThisPtr% = Node.Link.Next%
ENDWHILE
NewPtr% = FN_NEW_NODE(Node{})
PROC_COPY_STRUCTURE(Detail{}, Node{})
Node.Link.Next% = ThisPtr%
PRINT "ThisPtr% = ";ThisPtr%
IF PrevPtr% THEN
PROC_SET_LINK(Node{}, PrevPtr%, NewPtr%)
ELSE
ListPtr.Details.Used% = NewPtr%
ENDIF
PRINT "ListPtr.Details.Used% = "; ListPtr.Details.Used%
ENDWHILE
CLOSE#F%
END
DEF PROC_SET_LINK(n{}, n%, l%)
!(^n{}+4) = n%
n.Link.Next% = l%
ENDPROC
DEF FN_NEW_NODE(RETURN n{})
LOCAL P%
DIM P% DIM(n{})-1
!(^n{}+4) = P%
PRINT "NEW NODE PTR = "; P%
= P%
DEF FN_GET_ITEM(n{}, P%)
IF P% = 0 THEN = ""
!(^n{}+4) = P%
PRINT "NODE VALUE = """; n.Category.Main$; """"
= n.Category.Main$
DEF PROC_COPY_STRUCTURE(from{}, to{})
to.Category.Main$ = from.Category.Main$
ENDPROC
DEF PROC_RECORD_INPUT(F%, rec{})
LOCAL text$, key$, info$
PROC_ClearStruct(rec{})
REPEAT INPUT#F%, text$ : UNTIL INSTR(text$, "Start Record") > 0 OR EOF#F%
INPUT#F%, text$
IF EOF#F% THEN = FALSE
WHILE INSTR(text$, "End Record") = 0 AND NOT EOF#F%
IF ASC(text$) = 10 THEN text$ = MID$(text$, 2)
key$ = LEFT$(text$, INSTR(text$, "="))
info$ = MID$(text$, INSTR(text$, "=") + 1)
CASE key$ OF
WHEN "Category Main=" : rec.Category.Main$ = info$
ENDCASE
INPUT#F%, text$
ENDWHILE
ENDPROC
DEF PROC_ClearStruct(S{})
LOCAL E{}, F{}
DIM E{} = S{}, F{} = S{}
E{} = S{} : S{} = F{}
ENDPROC
DEF PROC_CREATE_DATA_FILE
LOCAL F%
RESTORE +1
DATA C, A, B, D
F% = OPENOUT(File$)
FOR I% = 0 TO 3
READ Detail.Category.Main$
PRINT#F%, CHR$10 + "[--Start Record--]"
PRINT#F%, CHR$10 + "Category Main=" + Detail.Category.Main$
PRINT#F%, CHR$10 + "[--End Record--]"
NEXT
CLOSE#F%
ENDPROC
DEF PROCcopystructwithstring(dst{}, src{})
LOCAL temp$
SWAP temp$, src.member$
dst{} = src{}
dst.member$ = temp$
SWAP temp$, src.member$
ENDPROC