Logo
~Apps~
~Projects~
~Contact~

asoft_detoken.c

Go to the documentation of this file.
00001 #include <stdio.h>
00002 #include <string.h>
00003 
00004   /* Starting at 0x80 */
00005 
00006 char applesoft_tokens[][8] =
00007 {
00008 /* 80 */ "END", "FOR", "NEXT", "DATA", "INPUT", "DEL", "DIM", "READ", 
00009 /* 88 */ "GR", "TEXT", "PR #", "IN #", "CALL", "PLOT", "HLIN", "VLIN", 
00010 /* 90 */ "HGR2", "HGR", "HCOLOR=", "HPLOT", "DRAW", "XDRAW", "HTAB", "HOME", 
00011 /* 98 */ "ROT=", "SCALE=", "SHLOAD", "TRACE", "NOTRACE", "NORMAL", "INVERSE", "FLASH", 
00012 /* A0 */ "COLOR=", "POP", "VTAB ", "HIMEM:", "LOMEM:", "ONERR", "RESUME", "RECALL", 
00013 /* A8 */ "STORE", "SPEED=", "LET", "GOTO", "RUN", "IF", "RESTORE", "&", 
00014 /* B0 */ "GOSUB", "RETURN", "REM", "STOP", "ON", "WAIT", "LOAD", "SAVE", 
00015 /* B8 */ "DEF", "POKE", "PRINT", "CONT", "LIST", "CLEAR", "GET", "NEW", 
00016 /* C0 */ "TAB (", "TO", "FN", "SPC(", "THEN", "AT", "NOT", "STEP", 
00017 /* C8 */ "+", "-", "*", "/", "^", "AND", "OR", ">", 
00018 /* D0 */ "=", "<", "SGN", "INT", "ABS", "USR", "FRE", "SCRN (", 
00019 /* D8 */ "PDL", "POS", "SQR", "RND", "LOG", "EXP", "COS", "SIN", 
00020 /* E0 */ "TAN", "ATN", "PEEK", "LEN", "STR$", "VAL", "ASC", "CHR$", 
00021 /* E8 */ "LEFT$", "RIGHT$", "MID$", "", "", "", "", "", 
00022 /* F0 */ "", "", "", "", "", "", "", "", 
00023 /* F8 */ "", "", "", "", "", "(", "(", "("
00024 };
00025 
00026 /*
00027 Integer Basic
00028       $03: :
00029       $04: LOAD
00030       $05: SAVE
00031       $07: RUN
00032       $09: DEL
00033       $0A: , 
00034       $0B: NEW
00035       $0C: CLR
00036       $0D: AUTO
00037       $0F: MAN
00038       $10: HIMEM:
00039       $11: LOMEM:
00040       $12: +
00041       $13: -
00042       $14: *
00043       $15: /
00044       $16: =
00045       $17: #
00046       $18: >=
00047       $19: >
00048       $1A: <=
00049       $1B: <>
00050       $1C: <
00051       $1D:  AND
00052       $1E:  OR
00053       $1F:  MOD
00054       $20: ^
00055       $22: (
00056       $23: , 
00057       $24, 
00058       $25:  THEN
00059       $26, 
00060       $27: , 
00061       $28, $29: \"
00062       $2A: (
00063       $2D: (
00064       $2E:  PEEK
00065       $2F: RND
00066       $30: SGN
00067       $31: ABS
00068       $32: PDL
00069       $34: (
00070       $35: +
00071       $36: -
00072       $37: NOT
00073       $38: (
00074       $39: =
00075       $3A: #
00076       $3B: LEN (
00077       $3C: ASC (
00078       $3D: SCRN (
00079       $3E: , 
00080       $3F:  (
00081       $40: $
00082       $42: (
00083       $43, 
00084       $44: , 
00085       $45, 
00086       $46, 
00087       $47: ;
00088       $48, 
00089       $49: , 
00090       $4A: , 
00091       $4B: TEXT
00092       $4C: GR
00093       $4D: CALL
00094       $4E, 
00095       $4F: DIM
00096       $50: TAB
00097       $51: END
00098       $52,  $53,  $54: INPUT
00099       $55: FOR
00100       $56:  =
00101       $57:  TO
00102       $58:  STEP
00103       $59: NEXT
00104       $5A: , 
00105       $5B: RETURN
00106       $5C: GOSUB
00107       $5D: REM
00108       $5E: LET
00109       $5F: GOTO
00110       $60: IF
00111       $61, 
00112       $62: PRINT
00113       $63: PRINT
00114       $64:   POKE
00115       $65: , 
00116       $66: COLOR=
00117       $67: PLOT
00118       $68: , 
00119       $69: HLIN
00120       $6A: , 
00121       $6B:  AT
00122       $6C: VLIN
00123       $6D: , 
00124       $6E:  AT
00125       $6F: VTAB
00126       $70, 
00127       $71:  =
00128       $72: )
00129       $74: LIST
00130       $75: , 
00131       $77: POP
00132       $79: NO DSP
00133       $7A: NO TRACE
00134       $7B, 
00135       $7C: DSP
00136       $7D: TRACE
00137       $7E: PR #
00138       $7F: IN #
00139 */
00140     
00141     
00142 int main(int argc, char **argv)
00143 {
00144   FILE *fil;
00145   int ch1, i;
00146   unsigned char size1, size2;
00147   unsigned char line1, line2;
00148   unsigned char eight, line_length;
00149   short ifc = 0;
00150   short q = 0;
00151 
00152   if (argc > 1)
00153     fil = fopen(argv[1],"rb");
00154   else
00155     fil = stdin;
00156 
00157   // read size, first two bytes
00158   size1 = fgetc(fil);
00159   size2 = fgetc(fil);
00160   while (!feof(fil))
00161   {
00162     line_length = fgetc(fil);
00163     eight = fgetc(fil);  /* sometimes 8, sometimes 9? */
00164     if (eight == 0) 
00165     {
00166       break;
00167     }
00168     line1 = fgetc(fil);
00169     line2 = fgetc(fil);
00170     printf("%4d ", (((int)line2)<<8) + line1);
00171   
00172     while ( (ch1 = fgetc(fil)) != 0 )
00173     {
00174       if (ch1 >= 0x80)
00175       {
00176         fputc(' ', stdout);
00177         for (i = 0; i < strlen(applesoft_tokens[ch1-0x80]); i++)
00178         {
00179           fputc(applesoft_tokens[ch1 - 0x80][i], stdout);
00180         }
00181         fputc(' ', stdout);
00182         if (ch1 == 0xad)
00183         {
00184           ifc++;
00185         }
00186       }
00187       else
00188       if (ch1 == ':' && !ifc && !q)
00189       {
00190         printf("\n     ");
00191       }
00192       else
00193       {
00194         fputc(ch1, stdout);
00195         if (ch1 == '"')
00196         {
00197           q = !q;
00198         }
00199       }
00200     }
00201     printf("\n");
00202     ifc = 0;
00203   } // while (!feof)
00204   if (argc > 1)
00205     fclose(fil);
00206   return 0;
00207 }
Page, code, and content Copyright (C) 2005 by Anders Hedström
Generated on Mon Aug 29 20:21:47 2005 for C++ Sockets by  doxygen 1.4.4