Heute so gecodet...

  • Heute so gecodet...

    Mal ein Thread Äequivalent für "Heute so gebastelt..." für Coder.


    Ich fange mal an.

    Ich habe ein Tool für die Erkennung der installierten .NET Framework Versionen benötigt.
    Habe zwar vor einer Weile schon eins in VB.NET Code erstellt. Das ist aber etwas witzlos, da es .NET 2.0 voraussetzt und es ist mir ein paar Mal bei Kunden passiert, dass diese .NET 4/4.5/4.6.x drauf haben und eben kein 2.0/3.0/3.5.

    Das kleine Tool soll möglichst keine Abhängigheiten haben, damit es auf allen vernünftigen Windows-Versionen als Copy+Paste EXE läuft.
    Da hat man dann nicht viel zur Auswahl: Entweder C++ oder VB6. Letzteres wird früher oder später abgeschossen als Runtimes, also bleibt C++ und Win32 API.

    Habe dazu diesen C++ Code mal kopiert. Funktioniert auch, aber als Win32 GUI App. Doof. X/
    Muss es mal auseinandernehmen und auf Konsolen-App umstellen.

    @Tale-X: Was ist der Unterschied zwischen dem "<MeinIcon>.ico" und "small.ico"? letzteres als Standardicon ist kleiner in der Grösse, aber wieso benötigt es 2 Icon-Dateien? Die haben doch alle Grössen drin?
    Unter .NET GUI-App gibt es auch zwei Icons: Eins für das EXE und eins für das Fenster-Icon. Ist "small.ico" für das Fenster? :gruebel
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von syshack ()

  • So, die Win32 Console App ist auch fertig. Sogar mit Icon. Bin total eingerostet in C++, das hat viel zu lange gedauert.
    So banale Dinge wie Strings behandeln sind echt viel einfacher in .NET.
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki
  • Icons... Thema mit dem man während der Programmentwicklung nur einmal Kontakt hat... Ich hab bei mir in den Anwendungen nur ein Icon mit verschiedenen Größen drin. Und Konsole ist bei mir in der Regel ohne Icon - was im Hintergrund läuft, muss nicht klickibunt gemacht werden ;)

    Strings... auch in MFC kein Problem dank CString...-Klassen. Ich dachte ja, dass die Standardlibrary auch gescheite String-Klassen bietet, scheint wohl nicht so zu sein. Bei Win-Konsole nutze ich - wenn ich nicht wegen anderer Dinge schon MFC eingebunden habe - hauptsächlich die _tcs...-Funktionen (_tcslen, _tcsstr, _tcsncpy etc. - bzw. die Safe-Varianten davon ).
  • Zwar nicht heute, aber vor ein paar Wochen habe ich mal ein kleines Python-Skript geschrieben, das C64-Multicolor-Sprites, die zuvor in GIMP oder einem sonstigen Grafikprogramm erzeugt wurden und als PNG gespeichert wurden, in ACME-Syntax umwandelt. Ich weiss, es gibt auch "richtige" Sprite-Editoren, die ich verwenden koennte, aber in meinem Fall lagen die Sprites schon durch den Python-Prototyp in Form von PNGs vor, sodass das auf diese Art und Weise einfacher war:

    Python-Quellcode

    1. import pygame
    2. f = open('sprites.txt', 'w')
    3. spritenum = 0
    4. def loadSprite(filename):
    5. spr = pygame.image.load(filename)
    6. global spritenum
    7. spritenum += 1
    8. s = '\n\n ;-- sprite %02i\n !align 63, 0, 0\n\n' % spritenum
    9. for y in range(spr.get_height()):
    10. s += ' !byte %'
    11. for x in range(0, spr.get_width(), 2):
    12. if x in [8, 16]:
    13. s += ', %'
    14. if spr.get_at((x, y)) == (255, 0, 255):
    15. s += '#.'
    16. elif spr.get_at((x, y)) == (255, 255, 255):
    17. s += '##'
    18. elif spr.get_at((x, y)) == (99, 99, 99):
    19. s += '.#'
    20. else:
    21. s += '..'
    22. s += '\n'
    23. print s
    24. f.write(s)
    25. loadSprite('gfx/p_left.png')
    26. loadSprite('gfx/p_left_w1.png')
    27. loadSprite('gfx/p_left_w2.png')
    28. ...
    29. f.close()
    Alles anzeigen


    Die Farben sind in den Zeilen 17, 19 und 21 zu finden; d.h. meine Sprites waren im PNG also in Form von weiss, grau, und magenta angelegt (plus eine beliebige andere Farbe als Hintergrund). Wer andere Farben verwendet, muss diese halt entsprechend im Code anpassen.

    Die Sprite-Konvertierung wird, wie man sieht, ab Zeile 30 angestossen. Hier einfach eine komplette Liste der Sprites anlegen, dann werden die alle nacheinander in die Datei "sprites.txt" gelegt. Ein einzelnes Sprite in dieser Datei sieht dann so aus:

    Brainfuck-Quellcode

    1. ;-- sprite 10
    2. !align 63, 0, 0
    3. !byte %........, %........, %........
    4. !byte %........, %........, %........
    5. !byte %........, %........, %........
    6. !byte %......#., %#.#....., %........
    7. !byte %#.#.#.#., %#.#.#..., %........
    8. !byte %....####, %######.., %........
    9. !byte %....##.., %##..##.., %........
    10. !byte %....####, %######.., %........
    11. !byte %....#..., %........, %........
    12. !byte %..#.#.##, %####...., %........
    13. !byte %#.#.#.#., %#.#.#..#, %.#.#.#.#
    14. !byte %#...#.#., %#....#.#, %...#....
    15. !byte %##..#.#., %#....#.#, %.#......
    16. !byte %###.#.#., %#.#..#.., %.#......
    17. !byte %...#.#.#, %.#.#.#.., %...#....
    18. !byte %...#.#.., %.#.#...., %........
    19. !byte %...#.#.., %.#.#...., %........
    20. !byte %..##...., %..##...., %........
    21. !byte %####...., %..####.., %........
    22. !byte %........, %........, %........
    23. !byte %........, %........, %........
    Alles anzeigen
    Diese Datei laesst sich dann einfach in den restlichen Assembler-Code einbetten oder includen.

    Das Skript benoetigt die Pygame-Lib.
    SHOTGUN - 4-Player Death Match - Website / CSDb / X-Mas
    FROGS - 4-Player Frog Pond - Website / CSDb
  • Tale-X schrieb:

    Und Konsole ist bei mir in der Regel ohne Icon - was im Hintergrund läuft, muss nicht klickibunt gemacht werden
    Ähem...ich hab es gerne, wenn ich in einem Verzeichnis wo doch einige Dateien drin sein können, schnell ein Programm rein visuell durch Farben/Icons erkenne.

    Das ist in der Testphase (und langen Arbeitstagen, wo die Augen langsam müde werden) durchaus oft so, dass ich auch Konsolen-Apps durch Doppelklick starten muss.
    Insofern finde ich es schon richtig, dass auch eine Konsolen-App EXE ein eigenes Icon hat.
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki
  • Dieser Tage wurde bei uns in der Bude an einer Maschine nachträglich eine automatische Schmiermittelpumpe installiert.
    Ich habe das Ding heute ins S7 Programm und in die WinCC Visualisierung "gecodet".
    Zählt das ? :thumbsup:
    3 X 1541Ultimate
    4 X Merlin PP64 Eprommer
    Twinliner, Fashion Vision,
    ca. 30 Videospielplatinen
    Pins: Bride Of Pinbot + Jack*Bot
    C64, C65, C66, Gammel+Mist...
    suche:
    ne Schachtel voll Holzelektroden... :thumbsup:
  • In den letzten Tagen: Wii-Support für GCVideo-DVI - ist aber noch nicht veröffentlicht weil das sicherheitshalber nochmal am Gamecube getestet wird

    Quellcode

    1. 10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    2. 20 forj=1to5:printchr$(rnd(1)*16+70);:next
    3. 30 printint(rnd(1)*328)-217

    sd2iec Homepage
  • Hucky schrieb:

    Dieser Tage wurde bei uns in der Bude an einer Maschine nachträglich eine automatische Schmiermittelpumpe installiert.
    Ich habe das Ding heute ins S7 Programm und in die WinCC Visualisierung "gecodet".
    Zählt das ? :thumbsup:
    Alles was soft ist und nicht hard "gecoded" ist: :dafuer:
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki
  • ZeHa schrieb:

    vor ein paar Wochen habe ich mal ein kleines Python-Skript geschrieben, das C64-Multicolor-Sprites, die zuvor in GIMP oder einem sonstigen Grafikprogramm erzeugt wurden und als PNG gespeichert wurden, in ACME-Syntax umwandelt.
    :thnks:
    Das hätte ich letztens für "mousetest" gut gebrauchen können, aber es gibt sicher ein nächstes Mal...

    ZeHa schrieb:

    Ein einzelnes Sprite in dieser Datei sieht dann so aus:

    Quellcode

    1. ;-- sprite 10
    2. !align 63, 0, 0
    3. [...]
    4. !byte %......#., %#.#....., %........
    5. [...]
    Willst Du dafür nicht lieber das SpriteLine-Makro benutzen? Siehe docs/AllPOs.txt bzw. den mousetest-Source. Dann sähe die obige Zeile so aus:

    Quellcode

    1. +SpriteLine %......#.#.#.............
    Das erleichtert nachträgliche Änderungen.

    ...seit ACME 0.95.7 geht es übrigens auch ganz ohne spezielles Makro, da man jetzt per "!be16", "!be24" und "!be32" Werte auch big-endian ablegen kann. Die obige Zeile kann also auch als

    Quellcode

    1. !be24 %......#.#.#.............
    geschrieben werden, benötigt aber einen aktuellen ACME.
    Yes, I'm the guy responsible for the ACME cross assembler

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Mac Bacon ()

  • syshack schrieb:

    Hucky schrieb:

    Dieser Tage wurde bei uns in der Bude an einer Maschine nachträglich eine automatische Schmiermittelpumpe installiert.
    Ich habe das Ding heute ins S7 Programm und in die WinCC Visualisierung "gecodet".
    Zählt das ? :thumbsup:
    Alles was soft ist und nicht hard "gecoded" ist: :dafuer:
    Zählt auch VBA unter Excel? :D

    Mache ich auf der Arbeit momentan richtig viel. Gar nicht so einfach ne Tabelle DAU-Sicher hinzubekommen. :puhh:

    Ich wäre schon froh, wenn der VBA Editor nur die Hälfte der Fähigkeiten vom Visual Studio hätte. :umfall:
    Mitwäre das nicht passiert! :prof:
    :syshack: Meine 3D-Drucker Teile auf thingiverse.com/oobdoo/designs :strom:
    Sammlung | 102 Bücher bzw. 28.009 Buchseiten mit Z80/8080/8085 Power
  • syshack schrieb:

    Habe dazu diesen C++ Code mal kopiert. Funktioniert auch, aber als Win32 GUI App. Doof.
    Muss es mal auseinandernehmen und auf Konsolen-App umstellen.
    Auf der Seite sind ja mehrere Versionen. Der einfachste Test scheint
    mir der nach den Reg-Entries zu sein. So weit ich den Code verstanden
    habe wird unter "Software\\Microsoft\\.NETFramework\..blabla" gesucht.

    Schau mal unter "Software\\Microsoft\\NET Framework Setup\\NDP"
    nach. Da finden sich mehrere Ordner, je Version einer. Je Version ist
    ein Wert "Install", immer mit "0x0000001" gesetzt. Das zu testen dürfte
    wesentlich einfacher/systematischer sein. Insbesondere ist damit sogut
    wie keine Stringbearbeitung nötig.

    Falls du z.B. mit VirtualBox eine VM mit XP aufsetzen kannst, dann lässt
    sich ja jede NET-Version aufspielen und mit der Test-Software abchecken.


    Edit: Gerade noch gefunden:
    msdn.microsoft.com/de-de/library/hh925568(v=vs.110).aspx
  • Ich mache gerade was um auf gang ganz ... ganz vielen Servern die Logs des nächtlichen TSM-Backup-Laufs auszuwerten. Mit Windows-Servern klappts schon, als nächstes muss ich noch hinbekommen, die selben Infos (per Putty und WinSCP) aus Linux-Büchsen rauszuholen. Die Auswertung, die der TSM-Server zumailt (auf den TSM-Server selbst haben wir keinen Zugriff, der ist vom Serverhoster outgesourced und wird wiederum von anderen outgesourcten Admins in Südasien betreut...), reicht nicht um Fehler zu finden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von 1ST1 ()

  • Heute gönne ich mir eine Druckerpause und spiele etwas mit VB.net rum. Nicht das ich alles vergesse wegen dem schrecklichen VBA.
    Mein Z80-Disassembler kann schon NOP und DEFB Hexwert ausgeben :D
    Mitwäre das nicht passiert! :prof:
    :syshack: Meine 3D-Drucker Teile auf thingiverse.com/oobdoo/designs :strom:
    Sammlung | 102 Bücher bzw. 28.009 Buchseiten mit Z80/8080/8085 Power
  • Jotta schrieb:

    Auf der Seite sind ja mehrere Versionen. Der einfachste Test scheint
    mir der nach den Reg-Entries zu sein. So weit ich den Code verstanden
    habe wird unter "Software\\Microsoft\\.NETFramework\..blabla" gesucht.
    Ja, ich hab ja das Programm auch zum Laufen gekriegt und dann als ConsolenApp musste ich "nur" die Ausgabe statt in eine MessageBox per printf ausgeben.
    Mein Problem war, die gefühlt 278 Stringvarianten und dazu passende printf Varianten so zusammen zubringen, dass man diese zusammensetzen und ausgeben kann.
    Klar, ich bin total eingerostet in C++. Sowas banales wie 3 Strings (TCHAR) zusammensetzen klappte einfach nicht sofort.
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von TheRealWanderer () aus folgendem Grund: Auf Wunsch vom Autor geändert.

  • Heute mal wieder etwas an meinem elektronischen Logbuch fürs Geocachen weiter gecodet.
    Basis: Atmega 8 - programmiere ich mit Bascom
    Angestöpselt ist ein 2x16 LCD Display und eine 4x3 Tastatur.
    Bascom ist irgendwie manchmal unlogisch ?(
    Read + Write Befehle ins Eeprom sind schon spannend :rolleyes:
    82% Flash bereits vollgestopft - ist aber fast fertig :thumbsup:

    Hucky
    3 X 1541Ultimate
    4 X Merlin PP64 Eprommer
    Twinliner, Fashion Vision,
    ca. 30 Videospielplatinen
    Pins: Bride Of Pinbot + Jack*Bot
    C64, C65, C66, Gammel+Mist...
    suche:
    ne Schachtel voll Holzelektroden... :thumbsup:
  • Moin !

    ich habe heute mal mein exomizer-filelist - bash-script ein bißchen erweitert.
    Für alle, die es noch nicht kennen, hier eine Kurzbeschreibung:

    Quellcode

    1. # exomize_filelist.sh
    2. # v0.2 (w) 25.06.2016 by GI-Joe
    3. #
    4. #
    5. # Dieses Script packt vollautomatisch alle PRG-files
    6. # im selben Verzeichnis und legt die gepackten Files
    7. # im Verzeichnis "${destinationfolder}" mit einem
    8. # geänderten filenamen mit vorangestelltem "exomized_"
    9. # ab.
    10. #
    11. # Sollte das gepackte PRG-file größer sein als das
    12. # Ursprungsfile, wird das Ursprungsfile genommen und
    13. # in das Unterverzeichnis "not_changed" kopiert.
    14. #
    15. # Alle zu packenden PRG-files sollten eine Basic-Line
    16. # haben, dann klappt's auch mit dem Programmstart ;-)
    Alles anzeigen
    ist natürlich noch erweiterbar (z.B. alle PRG's ind allen Unterverzeichnissen), aber nu funzen erstmal alle exomizer_args , die im Variablen-block stehen.
    Dateien
  • oobdoo schrieb:

    Ich brauchte mal eine bessere lesbare Auflistung aller Z80-Opcodes.

    Z80-Opcode.rar
    Danke, aber mit freier Software bekommt man das nicht auf Anhieb geöffnet:
    "UNRAR 4.10 freeware Copyright (c) 1993-2012 Alexander Roshal
    Z80-Opcode.rar is not RAR archive"

    ...laut hexdump befindet sich in dem Archiv eine "Z80-Opcode.xlsx", also habe ich vermutlich eh nichts verpasst. :D
    Yes, I'm the guy responsible for the ACME cross assembler