[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