Giter VIP home page Giter VIP logo

hypercardpreview's Introduction

Screenshot

Download v1.4 (September 16, 2019)

Mac OS 10.12 minimum

This application displays HyperCard stacks in Mac OS X.

The binary format of HyperCard stacks has been retro-engineered by numerous people, and now it is known with pretty good reliability. If you want to learn more about it, see the format description.

HyperCardPreview only displays the stacks, it does not edit them, it does not execute them. To do that you have to use a emulator: SheepShaver, Basilisk or vMac. For more information, you can go to hypercard.org. Another option is to play with stacks in the HyperCard Stack Archive.

It makes the seeing the stacks an experience of the old days. The look is very close to the original one, with bitmap fonts, old-style scrollers, aliasing. In the Home stacks the look is accurate to the pixel, as in most Apple stacks, but less so if there are colors, and not at all if there are XCMDs.

Features:

  • very accurate display,
  • declares the stacks as its own files, so they have an icon again in the Finder,
  • can open stacks from both HyperCard v 2.x and v 1.x,
  • can open stacks with private access by hacking the encryption.
  • can export texts, images and sounds.

How to use it

Browse with Keyboard

Change Card: press an arrow key, or page up / page down / home / end

Show/Hide All Cards: press enter or return

Browse with Trackpad

Change Card: scroll left or right, or swipe

Show/Hide All Cards: pinch

Display Button/Field Info

Get Button Info: press command-option (like in HyperCard), buttons are colored in blue and you can click on one to display the info.

Get Field Info: press command-option-shift (like in HyperCard), both fields and buttons are colored in blue and you can click on one to display the info.

Get Info of a Covered Button or Field: right-click somewhere on the card, the list of the buttons and fields at that location appears, from the frontmost to the outmost. That way you can get info about a button or field even if it is covered by the others.

Changes in version 1.4

Several new features, that make the app more lively:

  • stack windows can be resized,
  • text can be searched in the stacks,
  • text fields can be selected and copied,
  • auto-hilite buttons react to click,
  • images of cards and backgrounds can be seen and copied from the info panel,
  • info panels are more complete,
  • compressed sound resources can be played.

Besides, performance has been improved. I thank FFMpeg (Laszlo Torok and Francois Revol) for retro-engineering the compression algorithm used by Apple in the sound resources, I now handle MACE 3-to-1 and 6-to-1 compressions.

Technical details

JSON Export

The format of the JSON file is here.

Sounds

Some sounds can't be read: they beep instead of play, and they can't be exported. That's because HyperCardPreview can't read compressed sound resources, only uncompressed ones.

Colors

Colors of the AddColor XCMD are technically handled but cause troubles. For example the stack "Color Tools" is not good at all because the display is managed partly by scripts, which are not executed. Besides, macintosh pictures (PICT resources, which have a complex format designed by Apple) are still accepted by Mac OS X but with restrictions, especially there is no transparency.

Stacks v1.xx

Stacks of HyperCard 1.xx are handled but not accurarely displayed. The problem is that HyperCard changed some display settings between versions 1.xx and 2.xx, for example the text field margins, and HyperCardPreview doesn't handle that. In fact, HyperCardPreview displays v1.xx stacks as if they were just converted to v2.xx and were displayed the v2.xx way.

Scripts

HyperCardPreview doesn't display other scripts that HyperTalk.

It doesn't execute any script or any XCMD or XFNC.

Deprecation

HyperCardPreview doesn't use any deprecated API, so its future is bright.

That means that old APIs had to be partially re-coded: resource fork reading, resource management, text display, bitmap fonts, 1-bit imaging.

HyperCardPreview signing

It seems that I can't have a developer ID without paying a fee to Apple. And I'm not ready to do it just for that little soft.

The future of the app

It won’t grow much larger than that.

I don’t intend it to edit stacks and execute scripts, it would make an app several times more complex, and as long as nobody is using the stacks anymore, I don’t see the point.

But if you have bugs with some of your stacks, please inform me.

Can HyperCard be ported to Mac OS X?

If you have that in mind, check out LiveCode or Stacksmith.

In my opinion, HyperCard might be re-invented, but with a big restriction on the use cases. HyperCard had too many of them and that’s why it was so difficult to explain when people asked what it did. For example, HyperCard had cards and backgrounds, intended for display of content (text, images, databases), which is now perfectly handled by websites.

hypercardpreview's People

Contributors

johnlunney avatar maddthesane avatar paulmcclernan avatar pierrelorenzi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hypercardpreview's Issues

Standalone Stacks

Maybe this is not an issue, but is HyperCardPreview able to open standalone "stacks" or applications. Is it possible to open these with HyperCardPreview?

View Icons

Sometimes, a stack will have icons that aren't displayed on any button until a script executes, or were drawn but never used. HyperCardPreview has no way to view these icons.

Missing license information

This git repository doesn't have any licensing information.

What license is the software released under? What about the documentation.

This is quite important as this project is a good source of information about HyperCard file format.

Thanks!

Export Art

The ability to export the art for the cards, backgrounds, and icons would be incredibly valuable to anyone working to port old stacks to newer systems, or wanting to rescue old artwork.

If an export is beyond the scope of this project, just having a way to hide everything but the card or background art so someone can take a screenshot without buttons or fields would be useful.

NSRect initializer - "cannot type-check in a reasonable time"

I managed to compile this with Swift 5 enabled, but got a "cannot type-check in a reasonable time" error with the following NSRect initialization:

// original
return NSRect(x: view.frame.width/2 - initialSize/2,
y: view.frame.height/2 - initialSize/2,
width: initialSize,
height: initialSize)

// I got rid of the error by explicitly type-casting everything:

return NSRect(x: (CGFloat) ( ((CGFloat) (view.frame.width/2)) -
(CGFloat) (initialSize/2) ),
y: (CGFloat) ( ((CGFloat) (view.frame.height/2)) -
(CGFloat) (initialSize/2) ),
width: initialSize,
height: initialSize)

Is there any better way to do this? (Aside from the fact that I don't see why the first-example can't be type-checked, but I suppose there's some "type-checking theory" involving what exactly the type of "view.frame.width" is (as initialSize is an explicit CGFloat).

There's a post somewhere about how the "no implicit type casting" could encourage people to use the "wrong" abstractions simply to avoid the wordiness of explicit casts - say a variable that really should be an Integer, but the programmer declares as a CGFloat because it's used with NSRects and such all over. Does Swift have a concept of "allowable implicit casts" - where the programmer could explicitly specify sets of casts that would not lose any precision (Int -> CGFloat, Float->CGFloat [?], Int -> Double, etc), to alleviate this? Precision-losing casts would still need to be explicit.

"Semi-Automated" Java->Swift conversion of WyldCard for editing/creation?

I've looked at the WyldCard repo (https://github.com/defano/wyldcard) and am impressed - except it's in Java. That kind of puts the kibosh on making it into a "native-speed" osx or iOS app (thought how much "native speed" matters these days with multi-GHz processors. I remember processors when Hypercard 1.0 was new). And maybe not be able to distribute anything on the App Store if I ever develop it to that level - depending on whether Apple will allow a Java interpreter/JIT to be included in an App Store app (my guess: no - or at least "Apple might change its mind at any time")

I looked at the WyldCard source and thought for a second I could just convert things one-by-one to Swift (it's only 491 files) - until I saw classes like extending BaseErrorListener which I'm guessing swift doesn't have anything resembling.

Any ideas? Or how to adapt WyldCard to run as a "separated JIT (or even AOT?) layer" that a Swift based interface could then send messages and queries to? One difficulty would be that all the stack data would be contained in

I suppose there's no chance of convincing Apple to actually release the original source? (Thought it might just be a near-unreadable mess of Pascal and assembly.)

Export everything at once

I often want to export everything from a stack, and while it doesn't take long to run every export option individually, it would be really nice to have an "export all" that would export the JSON, card/background images, and the resources all at once.

FontDescriptor: How to deal with hashValue -> hash(into:) change? What to do with the hasher parameter?

How do I deal with the change from a "simple" hashValue to the newer hashValue(into:hasher hasher) in FontDescriptor? If I change the declaration (var hashValue) to "func hash(into hasher: inout Hasher) -> Int {", it gets rid of that error (presumably it works as it should, even though it doesn't do anything with the "hasher" parameter.

Even then, it still says the FontDescriptor doesn't conform to the protocol "Hashable" - but doesn't give any (I would suppose helpful) information as to how. I presume there are other protocol functions/variables that have that they added.

Thanks,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.