home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / utility / patch / sos_206 / arrowfix.pit < prev    next >
Text File  |  1992-04-09  |  2KB  |  80 lines

  1. #!PATCHIT.PRG
  2. #
  3. # Patches fuer Probleme mit WM_ARROWED-Nachrichten in GEM 3.2
  4. #
  5. # Versionen:
  6. # 1.0  mo  28.02.92  Basisversion (entspricht ARROWFIX v1.1)
  7. #
  8. # Autoren:
  9. # mo   (\/) Martin Osieka, Erbacherstr. 2, D-6100 Darmstadt
  10. #
  11.  
  12. PRINTF( "ARROWFIX v1.1\n")
  13. IF (ARGC() < 2) THEN
  14.   ABORT( "Missing TOS filename\n")
  15. ENDIF
  16. IF ((fp = FOPEN( ARGV( 1), "r+b")) == 0) THEN
  17.   ABORT( "Can't open '%s'\n", ARGV( 1))
  18. ENDIF
  19. FBASE( fp, $E00000)
  20.  
  21. # TOS-Image pruefen
  22. tossize = FSIZE( fp)
  23. tosversion = FPEEKW( fp, $E00002)
  24. IF (tosversion == $206) && (tossize == $40000) THEN
  25.   accessw = 2
  26. ELIF (tosversion == $306) AND (tossize == $80000) THEN
  27.   accessw = 4
  28. ELSE
  29.   ABORT( "Illegal TOS fileformat\n")
  30. ENDIF
  31.  
  32. # GEM-Position bestimmen
  33. gemmagic = FPEEKL( fp, $E00014)
  34. gemtext = FPEEKL( fp, gemmagic + 8)
  35.  
  36. # GEM Version pruefen
  37. gemversion = FPEEKW( fp, gemtext + $276)
  38. IF (gemversion != $0320) THEN
  39.   ABORT( "Illegal TOS version\n")
  40. ENDIF
  41.  
  42. # a) Ueberlaengenwert auf 0 setzen
  43. FSEEK( fp, gemtext + $1D56, 0)
  44. FPUTW( fp, $317C, $0000, $002C)  # MOVE.W  #0,$2C(A0)
  45.  
  46. # b) Warteroutine von ARROW-Repeat aendern
  47. irtime = FPEEKL( fp, gemtext + $CAC6)
  48. emplayall = FPEEKL( fp, gemtext + $271A)
  49. FSEEK( fp, gemtext + $CB6A, 0)
  50. FPUTW( fp, $2C08)  # MOVE.L  A0,D6
  51. FPUTW( fp, $49F9)  # LEA.L   irtime,A4
  52. FPUTL( fp, irtime)
  53. FPUTW( fp, $DC94)  # ADD.L   (A4),D6
  54. FPUTW( fp, $4EB9)  # JSR     emplayall
  55. FPUTL( fp, emplayall)
  56. FPUTW( fp, $BC94)  # CMP.L   (A4),D6
  57. FPUTW( fp, $64F6)  # BCC.B   $F6
  58. FPUTW( fp, $4E75)  # RTS
  59.  
  60. # c) Applikationsstatus anders abfragen
  61. FSEEK( fp, gemtext + $1CF0, 0)
  62. FPUTW( fp, $0828, $0001, $001F)  # BTST    #1,$1F(A0)
  63. FPUTW( fp, $672E)                # BEQ.B   $2E
  64.  
  65. PRINTF( "Calculate CRCs\n")
  66. TOSCRC( fp, accessw)
  67. IF (accessw == 2) THEN
  68.   FPUTW( fp, CRC( 0), CRC( 1))
  69. ELSE
  70.   FPUTL( fp, CRC( 0), CRC( 1))
  71. ENDIF
  72.  
  73. IF (FERROR( fp)) THEN
  74.   ABORT( "Write error in '%s'\n", ARGV( 1));
  75. ENDIF
  76.  
  77. FCLOSE( fp)
  78.  
  79. PRINTF( "OK\n")
  80.