// Copyright 2004 Marc Plouhinec /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ // OBJ_2_82P par Marc Plouhinec le 22/12/2003 // Convertisseur .OBJ en .82P pour SNG v1.0 // www.thebestof.tk // m_plouhinec@yahoo.fr #include "stdafx.h" #include #include #include #include #include FILE* fichier_obj; FILE* fichier_82p; char nom_du_fichier_82p[13]={0,0,0,0,0,0,0,0,0,0,0,0,0}; char compteur; int c; unsigned long checksum = 0; // Fonction venant de string85 par Dan Eble void fputc_and_sum(int c) { fputc(c, fichier_82p); checksum += c; } int main(int argc, char* argv[]) { printf("OBJ_2_82P par Marc Plouhinec le 22/12/2003\nConvertisseur .OBJ en .82P pour SNG v1.0\nSite: www.thebestof.tk Email: m_plouhinec@yahoo.fr\n\n"); _fmode=_O_BINARY; //On vérifie si le programme a été lancé avec un argument if (argc != 2) { printf("Syntaxe: OBJ_2_82P \n"); return 1; } //On ouvre le fichier .OBJ en lecture if (!(fichier_obj = fopen(argv[1], "r"))) { fprintf(stderr, "Erreur: Impossible de lire: %s\n", argv[1]); return 2; } //On prend le nom du fichier OBJ avec des lettres majuscules tronqué à 8 lettres. nom_du_fichier_82p[0]=*argv[1]; compteur=0; for( int i = 0; i < 8; i++ ) { nom_du_fichier_82p[compteur]=*argv[1]; //si le caractère n'est pas une lettre ou un chiffre, on s'arrete if (nom_du_fichier_82p[compteur] < 0x30 || nom_du_fichier_82p[compteur]==0x40 || (nom_du_fichier_82p[compteur] > 0x5A && nom_du_fichier_82p[compteur] <0x61) || nom_du_fichier_82p[compteur] > 0x7a) { nom_du_fichier_82p[compteur]=0;i=8;compteur--; } //si le caractère est une lettre minuscule, on la transforme en lettre majuscule if (nom_du_fichier_82p[compteur] >0x61 && nom_du_fichier_82p[compteur] <0x7a) { nom_du_fichier_82p[compteur]=nom_du_fichier_82p[compteur]-0x20; } argv[1]++;compteur++; } //On complete le nom par .82P nom_du_fichier_82p[compteur ]='.'; nom_du_fichier_82p[compteur+1]='8'; nom_du_fichier_82p[compteur+2]='2'; nom_du_fichier_82p[compteur+3]='P'; if (!(fichier_82p = fopen(&nom_du_fichier_82p[0], "wb"))) { fprintf(stderr, "Erreur: Impossible de creer le fichier: %s\n", &nom_du_fichier_82p[0]); return 3; } //On remplit le fichier 82p: //Merci à Romain Liévin (roms@lpg.ticalc.org) et Tim Singer (tsinger@gladstone.uoregon.edu) pour TIxx_guide //header fputs("**TI82**\x1A\x0A", fichier_82p); fputc(0x00, fichier_82p); //Commentaire (42 octets) fputs("Programme ASM pour SNG par Marc Plouhinec ", fichier_82p); //calcule la taille du fichier .obj for (i = 0; fgetc(fichier_obj) != EOF; i++); //taille du fichier +17+39 à l'envers fputc((unsigned char)(i+17+39), fichier_82p); fputc((i+17+39) >> 8, fichier_82p); //Toujours 0x0B et 0x00 fputc_and_sum(0x0b); fputc_and_sum(0x00); //Taille du fichier +39+2 à l'envers fputc_and_sum((unsigned char)(i + 39+2)); fputc_and_sum((i + 39+2) >> 8); //Type et nom du programme(au max 8 caractères) fputc_and_sum(0x06); for (int t=0 ; t> 8); fputc_and_sum((unsigned char)i + 39); fputc_and_sum((i+39) >> 8); //Le programme commence ici, il commence par du code en basic pour lancer le shell ( 39 octets) fputc_and_sum(0x3B); fputc_and_sum(0x31); fputc_and_sum(0x33); fputc_and_sum(0x70); fputc_and_sum(0x39); fputc_and_sum(0x34); fputc_and_sum(0x31); fputc_and_sum(0x33); fputc_and_sum(0x34); fputc_and_sum(0x33); fputc_and_sum(0x04); fputc_and_sum(0x5c); fputc_and_sum(0x4b); fputc_and_sum(0x10); fputc_and_sum(0x31); fputc_and_sum(0x39); fputc_and_sum(0x2b); fputc_and_sum(0x33); fputc_and_sum(0x34); fputc_and_sum(0x3f); fputc_and_sum(0x72); fputc_and_sum(0x04); fputc_and_sum(0x5c); fputc_and_sum(0x4b); fputc_and_sum(0x10); fputc_and_sum(0x31); fputc_and_sum(0x39); fputc_and_sum(0x2b); fputc_and_sum(0x33); fputc_and_sum(0x3f); fputc_and_sum(0xe0); fputc_and_sum(0x31); fputc_and_sum(0x2b); fputc_and_sum(0x31); fputc_and_sum(0x2b); fputc_and_sum(0x2a); fputc_and_sum(0x3f); fputc_and_sum(0xd9); fputc_and_sum(0x3f); //Copie le fichier .OBJ rewind(fichier_obj); while ((c = fgetc(fichier_obj)) != EOF) fputc_and_sum(c); //Ecrit le checksum fputc((unsigned char)checksum, fichier_82p); fputc(checksum >> 8, fichier_82p); //Et voila! fprintf(stderr, "Creation du fichier: %s\n" ,&nom_du_fichier_82p[0]); return 0; }