{{ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ Autor: Ingo Kripahle │ │ Copyright (c) 2010 Ingo Kripahle │ │ See end of file for terms of use. │ │ Die Nutzungsbedingungen befinden sich am Ende der Datei │ └──────────────────────────────────────────────────────────────────────────────────────────────────────┘ Informationen : hive-project.de Kontakt : drohne235@googlemail.com System : TriOS Name : plexus-tool Chip : Regnatix Typ : Programm Version : Subversion : Logbuch : 24-10-2010-dr235 Kommandoliste: Notizen: }} OBJ ios: "reg-ios" num: "glob-numbers" CON _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 OS_TIBLEN = 64 'gr??e des inputbuffers VAR 'systemvariablen byte tib[OS_TIBLEN] 'tastatur-input-buffer byte cmdstr[OS_TIBLEN] 'kommandostring f?r interpreter byte token1[OS_TIBLEN] 'parameterstring 1 für interpreter byte token2[OS_TIBLEN] 'parameterstring 2 für interpreter byte tibpos 'aktuelle position im tib long ppos 'puffer für adresse long pcnt 'puffer für zeilenzahl byte plxnr 'nummer des geöffneten plexus PUB main | wflag ios.start 'ios initialisieren ios.startram ios.printnl plxnr := 0 repeat os_cmdinput 'kommandoeingabe os_cmdint 'kommandozeileninterpreter PUB os_cmdinput | charc 'sys: stringeingabe eine zeile ''funktionsgruppe : sys ''funktion : stringeingabe eine zeile ''eingabe : - ''ausgabe : - ''variablen : tib - eingabepuffer zur string '' : tibpos - aktuelle position im tib ios.print(@prompt2) tibpos := 0 'tibposition auf anfang setzen repeat until (charc := ios.keywait) == $0D 'tasten einlesen bis return if (tibpos + 1) < OS_TIBLEN 'zeile noch nicht zu lang? case charc ios#CHAR_BS: 'backspace if tibpos > 0 'noch nicht anfang der zeile erreeicht? tib[tibpos--] := 0 'ein zeichen aus puffer entfernen ios.printctrl(ios#CHAR_TER_BS) 'steuerzeichen an terminal senden other: 'zeicheneingabe tib[tibpos++] := charc 'zeichen speichern ios.printchar(charc) 'zeichen ausgeben ios.printnl tib[tibpos] := 0 'string abschließen tibpos := charc := 0 'werte rücksetzen PUB os_nxtoken1: stradr 'sys: token 1 von tib einlesen ''funktionsgruppe : sys ''funktion : nächsten token im eingabestring suchen und stringzeiger übergeben ''eingabe : - ''ausgabe : stradr - adresse auf einen string mit dem gefundenen token ''variablen : tib - eingabepuffer zur string '' : tibpos - aktuelle position im tib '' : token - tokenstring stradr := os_tokenize(@token1) PUB os_nxtoken2: stradr 'sys: token 2 von tib einlesen ''funktionsgruppe : sys ''funktion : nächsten token im eingabestring suchen und stringzeiger übergeben ''eingabe : - ''ausgabe : stradr - adresse auf einen string mit dem gefundenen token ''variablen : tib - eingabepuffer zur string '' : tibpos - aktuelle position im tib '' : token - tokenstring stradr := os_tokenize(@token2) PUB os_tokenize(token):stradr | i 'sys: liest nächsten token aus tib i := 0 if tib[tibpos] <> 0 'abbruch bei leerem string repeat until tib[tibpos] > ios#CHAR_SPACE 'führende leerzeichen ausbenden tibpos++ repeat until (tib[tibpos] == ios#CHAR_SPACE) or (tib[tibpos] == 0) 'wiederholen bis leerzeichen oder stringende byte[token][i] := tib[tibpos] tibpos++ i++ else token := 0 byte[token][i] := 0 stradr := token PUB os_nextpos: tibpos2 'sys: setzt zeiger auf nächste position ''funktionsgruppe : sys ''funktion : tibpos auf nächstes token setzen ''eingabe : - ''ausgabe : tibpos2 - position des nächsten tokens in tib ''variablen : tib - eingabepuffer zur string '' : tibpos - aktuelle position im tib if tib[tibpos] <> 0 repeat until tib[tibpos] > ios#CHAR_SPACE 'führende leerzeichen ausbenden tibpos++ return tibpos PUB os_cmdint 'sys: kommandointerpreter ''funktionsgruppe : sys ''funktion : kommandointerpreter; zeichenkette ab tibpos wird als kommando interpretiert '' : tibpos wird auf position hinter token gesetzt ''eingabe : - ''ausgabe : - ''variablen : tib - eingabepuffer zur string '' : tibpos - aktuelle position im tib repeat 'kommandostring kopieren cmdstr[tibpos] := tib[tibpos] tibpos++ until (tib[tibpos] == ios#CHAR_SPACE) or (tib[tibpos] == 0) 'wiederholen bis leerzeichen oder stringende cmdstr[tibpos] := 0 'kommandostring abschließen os_cmdexec(@cmdstr) 'interpreter aufrufen tibpos := 0 'tastaturpuffer zurücksetzen tib[0] := 0 PUB os_cmdexec(stradr) 'sys: kommando im ?bergebenen string wird als kommando interpretiert {{os_smdexec - das kommando im ?bergebenen string wird als kommando interpretiert stradr: adresse einer stringvariable die ein kommando enth?lt}} if strcomp(stradr,string("help")) 'help ios.print(@help1) elseif strcomp(stradr,string("open")) plx_open elseif strcomp(stradr,string("close")) plx_close elseif strcomp(stradr,string("put")) plx_put elseif strcomp(stradr,string("get")) plx_get elseif strcomp(stradr,string("testout")) plx_testout elseif strcomp(stradr,string("testin")) plx_testin elseif strcomp(stradr,string("scan")) plx_scan elseif strcomp(stradr,string("reset")) plx_reset elseif strcomp(stradr,string("debug")) plx_debug elseif strcomp(stradr,string("bye")) ios.stop else 'kommando nicht gefunden ios.print(stradr) ios.print(@prompt3) ios.printnl PRI plx_reset ios.plx_reset plxnr := 0 PRI plx_scan|i,anz ifnot plxnr i := 1 anz := num.FromStr(os_nxtoken1,num#DEC) ifnot anz anz := 8 repeat anz ios.print(string("Plexus :")) ios.printtab ios.printdec(i) ios.printtab ios.print(string("Status : ")) ios.printtab if ios.plx_open(i) ios.print(string("--")) else ios.print(string("ON")) waitcnt(cnt + clkfreq/100) ios.plx_close ios.printnl i++ waitcnt(cnt + clkfreq/100) else os_error(24) PRI plx_testout|i if plxnr i := 0 repeat num.FromStr(os_nxtoken1,num#DEC) ios.plx_put(1) ios.plx_put(i++) else os_error(23) PRI plx_debug|wert,i if plxnr i := 0 repeat wert := plx_portin ios.print(string("get[")) ios.printdec(i++) ios.print(string("] : ")) ios.printtab ios.printdec(wert) ios.printtab ios.print(string(": $")) ios.printhex(wert,2) ios.printtab ios.print(string(": %")) ios.printbin(wert,8) ios.printnl until ios.keystat ios.key else os_error(23) PRI plx_testin|wert,i if plxnr i := 0 repeat wert := plx_portin ios.print(string("get[")) ios.printdec(i++) ios.print(string("] : ")) ios.printtab ios.printdec(wert) ios.printtab ios.print(string(": $")) ios.printhex(wert,2) ios.printtab ios.print(string(": %")) ios.printbin(wert,8) ios.printnl repeat ios.printchar(".") waitcnt(cnt + clkfreq/2) while (wert == plx_portin) AND (ios.keystat == 0) ios.printchar("*") until ios.keystat ios.printchar("o") ios.key else os_error(23) PRI plx_portin:wert ios.plx_put(2) wert := ios.plx_get PRI plx_open plxnr := num.FromStr(os_nxtoken1,num#DEC) if os_error(ios.plx_open(plxnr)) plxnr := 0 PRI plx_close os_error(ios.plx_close) plxnr := 0 PRI plx_put if plxnr ios.plx_put(num.FromStr(os_nxtoken1,num#DEC)) else os_error(23) PRI plx_get|wert if plxnr wert := ios.plx_get ios.print(string("get : ")) ios.printdec(wert) ios.print(string(" : $")) ios.printhex(wert,2) ios.print(string(" : %")) ios.printbin(wert,8) ios.printnl else os_error(23) PUB os_error(err):error 'sys: fehlerausgabe if err ios.printnl ios.print(@err_s1) ios.printdec(err) ios.print(string(" : $")) ios.printhex(err,2) ios.printnl ios.print(@err_s2) case err 0: ios.print(@err0) 1: ios.print(@err1) 2: ios.print(@err2) 3: ios.print(@err3) 4: ios.print(@err4) 5: ios.print(@err5) 6: ios.print(@err6) 7: ios.print(@err7) 8: ios.print(@err8) 9: ios.print(@err9) 10: ios.print(@err10) 11: ios.print(@err11) 12: ios.print(@err12) 13: ios.print(@err13) 14: ios.print(@err14) 15: ios.print(@err15) 16: ios.print(@err16) 17: ios.print(@err17) 18: ios.print(@err18) 19: ios.print(@err19) 20: ios.print(@err20) 21: ios.print(@err21) 22: ios.print(@err22) 23: ios.print(@err23) 24: ios.print(@err24) OTHER: ios.print(@errx) ios.printnl error := err DAT prompt1 byte "ok ", $0d, 0 prompt2 byte ": ", 0 prompt3 byte "? ",0 wait1 byte "",0 help1 file "perplex.txt" byte $0d,0 err_s1 byte "Fehlernummer : ",0 err_s2 byte "Fehler : ",0 err0 byte "no error",0 err1 byte "fsys unmounted",0 err2 byte "fsys corrupted",0 err3 byte "fsys unsupported",0 err4 byte "not found",0 err5 byte "file not found",0 err6 byte "dir not found",0 err7 byte "file read only",0 err8 byte "end of file",0 err9 byte "end of directory",0 err10 byte "end of root",0 err11 byte "dir is full",0 err12 byte "dir is not empty",0 err13 byte "checksum error",0 err14 byte "reboot error",0 err15 byte "bpb corrupt",0 err16 byte "fsi corrupt",0 err17 byte "dir already exist",0 err18 byte "file already exist",0 err19 byte "out of disk free space",0 err20 byte "disk io error",0 err21 byte "command not found",0 err22 byte "timeout",0 err23 byte "device not open",0 err24 byte "device is open",0 errx byte "undefined",0