Dagens tips
Postat: 20 november 2014, 18:45:04
Jag kör en del olika projekt där man ofta ska kunde ändra parameter och såklart läsa dom också.
Jag har tidigare haft "skrivbara-i-terminalprogram" men inte alltid så enkla/lätta att minnas koder och jag är ganska trött på det nu.
Jag har därför hittat ett kul sätt, möjligen finns det en bit overhead men ändå...:
1: Jag gör konstant strängar med alla orden som ska kunde användas.
t.ex. "Set", "Get", "Intensity", "Speed" osv.
2: Jag har gjort en tabell med pekare till dessa ord och har en definition som anger antal ord i tabellen.
3: Jag har skrivit en rutin som jag matar med tabellen och antal ord samt källtexten som jag har skickat via serieporten. Den rutin ger en nolla ut om ordet inte kunde matchas eller en 1 + index på ordet. Är det alltså 3'dje ordet i tabellen blir resultatet 4. Samtidig får jag en variabel med hur många tecken som gick åt, då kan jag flytta min pekare om jag vill.
4: Jag har ett slutresultat som jag startar med att nolla för varje kommando. Sedan tar jag, för varje ord som hittas i meningen, och multiplicerar det förra resultat med AC (Antal Commands = antal ord i tabellen) och adderar senaste index. Om det finns ett okänd ord avsluts det hela för den kommandosträng.
5: För varje kontroll kollas det i en switch() om det är ett fullgott kommando. T.ex. är "intensity" inte ett fullt kommando men "get intensity" är det, precis som "set intensity xxx". Jag har såklart en definition för varje giltig sekvens och bara när rätt sekvens kommer utlösas dessa.
6: Slutresultatet är att jag kan skriva "meningar" med kommandon som sedan kan utföras. De är syntax-stabila och enkla och såklart har jag "help" som ett ett-ords kommando, den skriver sedan ut en lista över de kombinationer som gäller.
Rutinen som jämför orden med tabellen jämför utan att ta hänsyn till gemen/versal och ja, den är inte perfekt: egentligen ska man kolla att ordet faktisk sluter så att det verkligen är rätt längd. För tillfället kommer "get" att ge utslag för "gettysburg" och jag ska nog lägga till att det ska finnas en whitespace på rätt plats innan den jämför.
Det är en del jobb innan men nu har jag ett resultat som är enkelt att använda och som gör det enkelt att lägga in parameter via en seriell port.
Jag har tidigare haft "skrivbara-i-terminalprogram" men inte alltid så enkla/lätta att minnas koder och jag är ganska trött på det nu.
Jag har därför hittat ett kul sätt, möjligen finns det en bit overhead men ändå...:
1: Jag gör konstant strängar med alla orden som ska kunde användas.
t.ex. "Set", "Get", "Intensity", "Speed" osv.
2: Jag har gjort en tabell med pekare till dessa ord och har en definition som anger antal ord i tabellen.
3: Jag har skrivit en rutin som jag matar med tabellen och antal ord samt källtexten som jag har skickat via serieporten. Den rutin ger en nolla ut om ordet inte kunde matchas eller en 1 + index på ordet. Är det alltså 3'dje ordet i tabellen blir resultatet 4. Samtidig får jag en variabel med hur många tecken som gick åt, då kan jag flytta min pekare om jag vill.
4: Jag har ett slutresultat som jag startar med att nolla för varje kommando. Sedan tar jag, för varje ord som hittas i meningen, och multiplicerar det förra resultat med AC (Antal Commands = antal ord i tabellen) och adderar senaste index. Om det finns ett okänd ord avsluts det hela för den kommandosträng.
5: För varje kontroll kollas det i en switch() om det är ett fullgott kommando. T.ex. är "intensity" inte ett fullt kommando men "get intensity" är det, precis som "set intensity xxx". Jag har såklart en definition för varje giltig sekvens och bara när rätt sekvens kommer utlösas dessa.
6: Slutresultatet är att jag kan skriva "meningar" med kommandon som sedan kan utföras. De är syntax-stabila och enkla och såklart har jag "help" som ett ett-ords kommando, den skriver sedan ut en lista över de kombinationer som gäller.
Rutinen som jämför orden med tabellen jämför utan att ta hänsyn till gemen/versal och ja, den är inte perfekt: egentligen ska man kolla att ordet faktisk sluter så att det verkligen är rätt längd. För tillfället kommer "get" att ge utslag för "gettysburg" och jag ska nog lägga till att det ska finnas en whitespace på rätt plats innan den jämför.
Det är en del jobb innan men nu har jag ett resultat som är enkelt att använda och som gör det enkelt att lägga in parameter via en seriell port.