Home
JAQForum Ver 24.01
Log In or Join  
Active Topics
Local Time 22:31 14 Mar 2026 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : psram gone help if run out of Heap memory

Author Message
tenij000
Senior Member

Joined: 30/05/2025
Location: Netherlands
Posts: 103
Posted: 04:51am 14 Mar 2026
Copy link to clipboard 
Print this post

was gone try to add text for cells but then i run out of Heap memory

' ============================================================
' PICO-SPREADSHEET V1.7 (FULL VERSION)
' ============================================================
' Functies: Auto-Grid, Formulegeheugen, Save/Load, Anti-Crash
' ============================================================

CLS
DIM cells(26, 20)
DIM formulas$(26, 20)
fileName$ = "spreadsheet.csv"

' Startscherm met raster
GOSUB ShowGrid

DO
 ' De input verschijnt altijd onder het raster
 INPUT "Opdracht: ", cmd$
 cmd$ = UCASE$(cmd$)
 IF cmd$ = "EXIT" THEN END
 
 SELECT CASE cmd$
   CASE "CLEAR"
     FOR r = 1 TO 20: FOR c = 1 TO 26
       cells(c, r) = 0: formulas$(c, r) = ""
     NEXT c: NEXT r
     GOSUB ShowGrid
     PRINT ">> Alles gewist."
     
   CASE "SHOW"
     GOSUB ToonLijst
     
   CASE "SAVE"
     GOSUB OpslaanBestand
     GOSUB ShowGrid
     PRINT ">> Opgesl*gen in "; fileName$
     
   CASE "LOAD"
     GOSUB LadenBestand
     RecalculateAll
     GOSUB ShowGrid
     PRINT ">> Bestand geladen."

   CASE "HELP"
     GOSUB ToonHelp

   CASE ELSE
     ' Standaard: Verwerk de formule en ververs het grid
     GOSUB VerwerkFormule
     GOSUB ShowGrid
 END SELECT
LOOP

' --- RASTER WEERGAVE (MET SLIMME KLEUR-DETECTIE) ---
ShowGrid:
 LOCAL col, row, cVal, cStr$, pad, f$, isFormule, i, charCode
 CLS
 
 ' Print de kolomletters (A t/m E) in geel
 COLOR RGB(YELLOW), RGB(BLACK)
 PRINT "      ";
 FOR col = 1 TO 5
   PRINT "|    " + CHR$(64 + col) + "      ";
 NEXT col
 PRINT "|"
 
 COLOR RGB(WHITE), RGB(BLACK)
 PRINT "------" + STRING$(60, "-")

 ' Loop door de rijen (1 t/m 10)
 FOR row = 1 TO 10
   IF row < 10 THEN PRINT " ";
   PRINT STR$(row) + "   ";
   
   FOR col = 1 TO 5
     cVal = cells(col, row)
     cStr$ = CleanString$(STR$(cVal))
     f$ = formulas$(col, row)
     isFormule = 0
     
     ' --- CHECK: Is dit een berekening of verwijzing? ---
     ' 1. Check op wiskundige tekens
     IF INSTR(f$, "+") > 0 OR INSTR(f$,"-") > 0 OR INSTR(f$,"*") > 0 OR INSTR(f$,"/") > 0 THEN
       isFormule = 1
     ENDIF
     
     ' 2. Check op letters (celverwijzingen zoals A1, B2)
     FOR i = 1 TO LEN(f$)
       charCode = ASC(MID$(f$, i, 1))
       IF charCode >= 65 AND charCode <= 90 THEN isFormule = 1
     NEXT i
     
     ' Teken de cel-afscheiding in wit
     COLOR RGB(WHITE), RGB(BLACK)
     PRINT "| ";
     
     ' Bepaal de kleur van de waarde
     IF isFormule = 1 THEN
       COLOR RGB(CYAN), RGB(BLACK)   ' Formules/Sommen in Cyaan
     ELSE
       COLOR RGB(WHITE), RGB(BLACK)  ' Gewone getallen in Wit
     ENDIF
     
     PRINT cStr$;
     
     ' Vul de rest van de kolombreedte op met spaties (in wit)
     COLOR RGB(WHITE), RGB(BLACK)
     pad = 10 - LEN(cStr$)
     IF pad > 0 THEN PRINT STRING$(pad, " ");
   NEXT col
   
   COLOR RGB(WHITE), RGB(BLACK)
   PRINT "|"
 NEXT row
 
 PRINT "------" + STRING$(60, "-")
 PRINT "Typ HELP voor info. Opdracht (bijv. A1=B1+5):"
RETURN

' --- SUBROUTINES ---

ToonLijst:
 PRINT "--- ACTIEVE FORMULES ---"
 LOCAL fnd, rL, cL
 fnd = 0
 FOR rL = 1 TO 20: FOR cL = 1 TO 26
   IF formulas$(cL, rL) <> "" THEN
     PRINT CHR$(64 + cL); rL; " = "; formulas$(cL, rL)
     fnd = 1
   ENDIF
 NEXT cL: NEXT rL
 IF fnd = 0 THEN PRINT "(Geen formules gevonden)"
RETURN

ToonHelp:
 PRINT "--- HELP OVERZICHT ---"
 PRINT "A1=10       : Getal invoeren"
 PRINT "B1=A1*2.5   : Formule invoeren"
 PRINT "SHOW        : Lijst met alle formules"
 PRINT "SAVE / LOAD : Bestand op de Pico opslaan/laden"
 PRINT "CLEAR       : Alles wissen"
 PRINT "EXIT        : Programma stoppen"
 PRINT "Druk op Enter om terug te gaan..."
 INPUT dummy$
 GOSUB ShowGrid
RETURN

VerwerkFormule:
 LOCAL pPos, tR$, fR$, t$, f$, cX, rY
 pPos = INSTR(cmd$, "=")
 IF pPos > 0 THEN
   tR$ = LEFT$(cmd$, pPos - 1): fR$ = MID$(cmd$, pPos + 1)
   t$ = CleanString$(tR$): f$ = CleanString$(fR$)
   
   ' Controleer op zelf-verwijzing
   IF INSTR(f$, t$) > 0 THEN
     PRINT "!! Fout: Circulaire referentie!"
     PAUSE 2000
   ELSE
     ' Adres bepalen
     cX = ASC(LEFT$(t$, 1)) - 64
     rY = VAL(MID$(t$, 2))
     IF cX > 0 AND cX < 27 AND rY > 0 AND rY < 21 THEN
       formulas$(cX, rY) = f$
       RecalculateAll
     ELSE
       PRINT "!! Fout: Ongeldig cel-adres!"
       PAUSE 1500
     ENDIF
   ENDIF
 ENDIF
RETURN

OpslaanBestand:
 OPEN fileName$ FOR OUTPUT AS #1
 LOCAL rS, cS
 FOR rS = 1 TO 20: FOR cS = 1 TO 26
   IF formulas$(cS, rS) <> "" THEN
     PRINT #1, CHR$(64 + cS); rS; ","; formulas$(cS, rS)
   ENDIF
 NEXT cS: NEXT rS
 CLOSE #1
RETURN

LadenBestand:
 LOCAL rD, cD, kommaPos, rgl$, cl$, fr$
 ' Wissen voor het laden
 FOR rD = 1 TO 20: FOR cD = 1 TO 26: formulas$(cD, rD) = "": NEXT cD: NEXT rD
 OPEN fileName$ FOR INPUT AS #1
 DO WHILE NOT EOF(#1)
   LINE INPUT #1, rgl$
   kommaPos = INSTR(rgl$, ",")
   IF kommaPos > 0 THEN
     cl$ = LEFT$(rgl$, kommaPos - 1): fr$ = MID$(rgl$, kommaPos + 1)
     cX = ASC(LEFT$(cl$, 1)) - 64: rY = VAL(MID$(cl$, 2))
     formulas$(cX, rY) = fr$
   ENDIF
 LOOP
 CLOSE #1
RETURN

' --- REKEN ENGINE (SUB & FUNCTIONS) ---

SUB RecalculateAll
 LOCAL c, r, fStr$, fV$
 ' Twee passes om kettingreacties (C=B, B=A) op te vangen
 FOR pass = 1 TO 2
   FOR r = 1 TO 20: FOR c = 1 TO 26
     fStr$ = formulas$(c, r)
     IF fStr$ <> "" THEN
       fV$ = ParseFormula$(fStr$)
       cells(c, r) = EVAL(fV$)
     ENDIF
   NEXT c: NEXT r
 NEXT pass
END SUB

FUNCTION CleanString$(in$)
 LOCAL i, ch$, rs$
 rs$ = ""
 FOR i = 1 TO LEN(in$): ch$ = MID$(in$, i, 1)
   IF ch$ <> " " THEN rs$ = rs$ + ch$
 NEXT i
 CleanString$ = rs$
END FUNCTION

FUNCTION ParseFormula$(f$)
 LOCAL c, r, cn$, oStr$, vStr$
 oStr$ = f$
 ' Terugwaarts zoeken voorkomt dat A10 wordt gezien als A1 + "0"
 FOR c = 26 TO 1 STEP -1: FOR r = 20 TO 1 STEP -1
   cn$ = CHR$(64 + c) + CleanString$(STR$(r))
   IF INSTR(oStr$, cn$) > 0 THEN
     vStr$ = STR$(cells(c, r))
     oStr$ = ReplaceCell$(oStr$, cn$, vStr$)
   ENDIF
 NEXT r: NEXT c
 ParseFormula$ = oStr$
END FUNCTION

FUNCTION ReplaceCell$(br$, ou$, ni$)
 LOCAL p, res$
 res$ = br$: p = INSTR(res$, ou$)
 DO WHILE p > 0
   res$ = LEFT$(res$, p - 1) + ni$ + MID$(res$, p + LEN(ou$))
   p = INSTR(res$, ou$)
 LOOP
 ReplaceCell$ = res$
END FUNCTION


some times on the internet i see pico whit this 16mb extra memmory that gone help
 
Print this page


To reply to this topic, you need to log in.

The Back Shed's forum code is written, and hosted, in Australia.
© JAQ Software 2026