/* Jack Raats Noorddonk 107 4651 ZD Steenbergen 01670 - 65298 Email: 2:285/751@fidonet.org 27:1331/304@SIGnet.org 30 december 1992 DeSmet C / C68 v3.05 */ /* #define QL */ #include #ifdef QL #include #endif char *tabel[] = { " ","{1}","{2}","{7}","{4}", "{5}","{T}","{E}","{A}","{D}", "{S}","\"","#","$",":", "?","(",")",">","<", "=","+","-","*","/", ";",",",".","0","1", "2","3","4","5","6", "7","8","9","A","B", "C","D","E","F","G", "H","I","J","K","L", "M","N","O","P","Q", "R","S","T","U","V", "W","X","Y","Z","RND", "INKEY$","PI","CALL ","ERR MSGS ","DPOKE ", "ERROR ","CHAR "," ","TRACE ","DRAW ", "UNDRAW ","PROTECT ","EDIT ","AUTO ","DEF PROC ", "END PROC ","","DELETE ","DO ","LOOP ", "EXIT ","UNTIL ","WHILE ","WHEN ","INDENT ", "RESEQ ","OFF","CURSOR ","DATA ","RESTORE ", "READ ","NOSTALGIC ","USER ","*","ON", "HOME ","BREAK ","DPEEK ","LINE ","POP ", "PUSH ","CLR STACK ","DUP ","ELSE ","END WHEN ", "?","?","?","?","?", "?","?","?","?","?", "?","?","?","?","?", "?","?","?","[ ]","{Q}", "{W}","{6}","{R}","{8}","{Y}", "{E}","{H}","{G}","{F}","[\"]", "[#]","[$]","[:]","[?]","[(]", "[)]","[>]","[<]","[=]","[+]", "[-]","[*]","[/]","[;]","[,]", "[.]","[0]","[1]","[2]","[3]", "[4]","[5]","[6]","[7]","[8]", "[9]","[A]","[B]","[C]","[D]", "[E]","[F]","[G]","[H]","[I]", "[J]","[K]","[L]","[M]","[N]", "[O]","[P]","[Q]","[R]","[S]", "[T]","[U]","[V]","[W]","[X]", "[Y]","[Z]","\"\"","AT ","TAB ", "?","CODE ","VAL ","LEN ","SIN ", "COS ","TAN ","ASN ","ACS ","ATN ", "LN ","EXP ","INT ","SQR ","SGN ", "ABS ","PEEK ","USR ","STR$ ","CHR$ ", "NOT ","**"," OR "," AND ","<=", ">=","<>"," THEN "," TO "," STEP ", "LPRINT ","LLIST ","STOP ","SLOW ","FAST ", "NEW ","SCROLL ","CONT ","DIM ","REM ", "FOR ","GOTO ","GOSUB ","INPUT ","LOAD ", "LIST ","LET ","PAUSE ","NEXT ","POKE ", "PRINT ","PLOT ","RUN ","SAVE ","RAND ", "IF ","CLS ","UNPLOT ","CLEAR ","RETURN ", "COPY " }; unsigned char buffer [128]; int a, b, c, teller, lengte, count, dfile, regel; FILE *fi, *fo; #ifdef QL _endmsg = 0; char _PROG_NAME[] = "zx81list"; #endif int dpeek ( positie ) int positie; { a = buffer [positie]; b = buffer [positie+1]; return ( a + 256 * b ); } int newline ( ) { fread ( buffer, 1, 4, fi ); regel = 256 * buffer[0] + buffer[1]; lengte = dpeek ( 2 ); if ( teller >= dfile ) return ( 0 ); fprintf ( fo, "\n%4d ", regel ); count = 0; teller += 4; return ( 0 ); } fout ( ) { #ifdef QL printf ("\n\n Press ENTER to EXIT "); fflush ( stdout ); getchar(); #else printf ("\n\n"); fflush ( stdout ); #endif exit ( 1 ); } main ( argc, argv ) int argc; char *argv[]; { printf ( "\n ZX81 list utility V301292"); printf ( "\n (C) Jack Raats, Steenbergen 1992"); printf ( "\n Email: 2:285/751@fidonet.org"); printf ( "\n 27:1331/304@signet.org"); if ( argc != 3 ) { printf ("\n\n USAGE:"); #ifdef QL printf ("\n\n EX ZX81LIST;'filename_P filename_OUT'"); #else printf ("\n\n ZX81LIST filename.P filename.OUT"); #endif fout(); } if ( ! ( fi = fopen ( argv[1], "rb" ) ) ) { printf ("\n\n Cannot open %s", argv[1] ); fout(); } if ( ! ( fo = fopen ( argv[2], "wb" ) ) ) { printf ("\n\n Cannot open %s", argv[2] ); fout(); } fprintf ( fo, "\nZX81 LIST utility V051292"); fprintf ( fo, "\n(C) Jack Raats, Steenbergen 1992"); fprintf ( fo, "\nEmail: 2:285/751@fidonet.org"); fprintf ( fo, "\n 27:1331/304@signet.org"); fread ( buffer, 1, (16509-16393), fi ); fprintf ( fo, "\n\nFILE: %s", argv [1] ); fprintf ( fo, "\n\n----- SYSTEM VARIABLES -----\n"); fprintf ( fo, "\nPROG : %5d", 16509 ); dfile = dpeek ( 3 ); fprintf ( fo, "\nD_FILE: %5d", dfile ); fprintf ( fo, "\nVARS : %5d", dpeek ( 7) ); fprintf ( fo, "\nE_LINE: %5d", dpeek ( 11) ); fprintf ( fo, "\nSTKBOT: %5d", dpeek ( 17) ); fprintf ( fo, "\nSTKEND: %5d", dpeek ( 19) ); fprintf ( fo, "\n\n----- LEGENDA -----\n"); fprintf ( fo, "\n[A] means INVERSE A"); fprintf ( fo, "\n{A} means GRAPHICS A"); fprintf ( fo, "\n\n----- START OF LISTING -----\n"); teller = 16509; newline(); while ( teller < dfile ) { c = fgetc ( fi ); teller++; count++; switch (c) { case 118: if ( count != lengte ) { b = lengte - count; for ( a = 1 ; a <= b ; a ++ ) c = fgetc ( fi ); teller += b; } newline(); break; case 126: fread ( buffer, 1, 5, fi ); teller += 5; count += 5; break; default: fprintf ( fo, "%s", tabel[c] ); break; } } fprintf ( fo, "\n\n----- END OF LISTING -----\n"); fclose ( fi ); fclose ( fo ); printf ("\n\n READY...\n\n"); exit (0); }