[Scummvm-cvs-logs] SF.net SVN: scummvm: [27705] tools/branches/gsoc2007-decompiler

brixxie at users.sourceforge.net brixxie at users.sourceforge.net
Mon Jun 25 16:19:44 CEST 2007


Revision: 27705
          http://scummvm.svn.sourceforge.net/scummvm/?rev=27705&view=rev
Author:   brixxie
Date:     2007-06-25 07:19:44 -0700 (Mon, 25 Jun 2007)

Log Message:
-----------
 r10 at nyu:  brx | 2007-06-12 16:50:08 +0200
 antipasto.scm: added basic opcode handling skeleton code
 

Modified Paths:
--------------
    tools/branches/gsoc2007-decompiler/antipasto.scm

Property Changed:
----------------
    tools/branches/gsoc2007-decompiler/


Property changes on: tools/branches/gsoc2007-decompiler
___________________________________________________________________
Name: svk:merge
   - 489ca303-0d3d-4dc1-a57d-017c7912a06a:/local/gsoc2007-decompiler:9
   + 489ca303-0d3d-4dc1-a57d-017c7912a06a:/local/gsoc2007-decompiler:10

Modified: tools/branches/gsoc2007-decompiler/antipasto.scm
===================================================================
--- tools/branches/gsoc2007-decompiler/antipasto.scm	2007-06-25 14:19:36 UTC (rev 27704)
+++ tools/branches/gsoc2007-decompiler/antipasto.scm	2007-06-25 14:19:44 UTC (rev 27705)
@@ -2,7 +2,7 @@
 
 ;;; Antipasto - Scumm Script Disassembler Prototype (version 5 scripts)
 ;;; Copyright (C) 2007 Andreas Scholta
-;;; Time-stamp: <2007-06-08 20:19:52 brx>
+;;; Time-stamp: <2007-06-12 16:48:33 brx>
 
 ;;; This program is free software; you can redistribute it and/or
 ;;; modify it under the terms of the GNU General Public License
@@ -21,7 +21,7 @@
 ;;; $URL: /local/gsoc2007-decompiler/antipasto.scm $
 ;;; $Id: /local/gsoc2007-decompiler/antipasto.scm 5 2007-05-27T18:38:05.723705Z brx  $
 
-(require-extension posix)
+(require-extension posix srfi-1)
 
 (define ash arithmetic-shift)
 
@@ -30,7 +30,10 @@
 (define read-byte (compose char->integer read-char))
 
 (define (read-u8 reader)
-  (reader 'read-byte))
+  (let ((char (read-char (reader 'file-port))))
+    (if (eof-object? char)
+        char
+        (char->integer char))))
 
 (define (read-be-u32 reader)
   (bitwise-ior (ash (read-u8 reader) 24)
@@ -39,13 +42,13 @@
                (read-u8 reader)))
 
 (define (string->u32 string)
-  (define (build-u32 char-list integer)
+  (let build-u32 ((char-list (string->list string))
+                  (integer 0))
     (if (null? char-list)
         integer
         (build-u32 (cdr char-list)
                    (+ (ash integer 8)
-                      (char->integer (car char-list))))))
-  (build-u32 (string->list string) 0))
+                      (char->integer (car char-list)))))))
 
 (define lscr (string->u32 "LSCR")) ; 9
 (define scrp (string->u32 "SCRP")) ; 8
@@ -58,11 +61,9 @@
         (size (file-size file-name)))
     (lambda (op)
       (case op
-        ('read-byte (read-byte port))
+        ('file-name file-name)
         ('file-size size)
-        ('file-name file-name)
         ('file-port port)
-        ('eof (eof-object? ))
         ('close (close-input-port port))
         (else (error "script reader no-op" op))))))
 
@@ -88,18 +89,46 @@
        'room-exit-script)
       (else (error "unknown script type")))))
 
+(define opcode-register (make-hash-table))
+
+(define (register-opcode name code handler)
+  (hash-table-set! opcode-register code handler))
+
+(register-opcode "cutscene" 64
+                 (lambda (reader op)
+                   (let read-arg-list ((byte (read-u8 reader)))
+                     (cond ((eof-object? byte) #f)
+                           ((= byte 255) #t)
+                           (else (read-arg-list (read-u8 reader)))))
+                   '(cutscene arg-list-fuck)))
+
+(register-opcode "animateCostume" 145
+                 (lambda (reader op)
+                   '(animateCostume fuckup now)))
+
 (define (decode-op reader op)
-  op)
+  (let ((opcode-handler (hash-table-ref/default opcode-register
+                                                op
+                                                #f)))
+    (if opcode-handler
+        (opcode-handler reader op)
+        '(unknown shit))))
 
 (define (decode-ops reader decoded)
   (let ((op (read-u8 reader)))
     (if (eof-object? op)
         (reverse decoded)
-        (decodeOps reader (decode-op reader op)))))
+        (decode-ops reader
+                    (cons (decode-op reader op) decoded)))))
 
 (define test-script "/home/brx/code/gsoc2007-decompiler/M1.scummV5/01.beach.0201")
 
 (define (test-run)
   (let ((reader (make-script-reader test-script)))
     (parse-header reader)
+    (let print-decoded ((decoded (decode-ops reader '())))
+      (unless (or (null? decoded)
+                  (equal? '(unknown shit) (car decoded)))
+        (print (car decoded))
+        (print-decoded (cdr decoded))))
     (reader 'close)))


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list