initial commit (WIP)

This commit is contained in:
Bora Alper 2018-09-01 08:07:00 +03:00
commit eaf6d7ca8a
36 changed files with 118943 additions and 0 deletions

BIN
apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,200 @@
path = "/emulator"
memtest = 0
cpu {
model = "68000"
speed = 1
}
ram {
address = 0x000000
size = 4096K
}
rom {
file = "pce-macplus.rom"
address = 0x400000
size = 256K
}
rom {
file = "pce-macplus-pcex.rom"
address = 0xf80000
size = 256K
}
keyboard {
model = 7
intl = 0
}
rtc {
file = "pce-macplus-pram.dat"
realtime = 1
}
sony {
insert_delay = 2
}
serial {
port = 0
}
serial {
port = 1
}
sound {
driver = "sdl:lowpass=0"
}
terminal {
driver = "sdl"
# escape = "CtrlRight"
scale = 1
border = 0
aspect_x = 3
aspect_y = 2
}
scsi {
# address = 0x580000
# size = 0x1000
device {
id = 6
drive = 0x80
vendor = " SEAGATE"
product = " ST225N"
}
device {
id = 0
drive = 0x81
# CHS = 615/4/17
vendor = " SEAGATE"
product = " ST225N"
}
}
disk {
drive = 1
type = "auto"
file = "/emulator/fd1.dsk"
file = "/emulator/fd1.ana"
file = "/emulator/fd1.cp2"
file = "/emulator/fd1.image"
file = "/emulator/fd1.ima"
file = "/emulator/fd1.imd"
file = "/emulator/fd1.img"
file = "/emulator/fd1.msa"
file = "/emulator/fd1.pfdc"
file = "/emulator/fd1.psi"
file = "/emulator/fd1.raw"
file = "/emulator/fd1.st"
file = "/emulator/fd1.stx"
file = "/emulator/fd1.tc"
file = "/emulator/fd1.td0"
file = "/emulator/fd1.xdf"
file = "/emulator/fd1"
optional = 1
}
disk {
drive = 2
type = "auto"
file = "/emulator/fd2.dsk"
file = "/emulator/fd2.ana"
file = "/emulator/fd2.cp2"
file = "/emulator/fd2.image"
file = "/emulator/fd2.ima"
file = "/emulator/fd2.imd"
file = "/emulator/fd2.img"
file = "/emulator/fd2.msa"
file = "/emulator/fd2.pfdc"
file = "/emulator/fd2.psi"
file = "/emulator/fd2.raw"
file = "/emulator/fd2.st"
file = "/emulator/fd2.stx"
file = "/emulator/fd2.tc"
file = "/emulator/fd2.td0"
file = "/emulator/fd2.xdf"
file = "/emulator/fd2"
optional = 1
}
disk {
drive = 3
type = "auto"
file = "/emulator/fd3.dsk"
file = "/emulator/fd3.ana"
file = "/emulator/fd3.cp2"
file = "/emulator/fd3.image"
file = "/emulator/fd3.ima"
file = "/emulator/fd3.imd"
file = "/emulator/fd3.img"
file = "/emulator/fd3.msa"
file = "/emulator/fd3.pfdc"
file = "/emulator/fd3.psi"
file = "/emulator/fd3.raw"
file = "/emulator/fd3.st"
file = "/emulator/fd3.stx"
file = "/emulator/fd3.tc"
file = "/emulator/fd3.td0"
file = "/emulator/fd3.xdf"
file = "/emulator/fd3"
optional = 1
}
disk {
drive = 0x80
type = "auto"
file = "/emulator/hd1.dsk"
file = "/emulator/hd1.ana"
file = "/emulator/hd1.cp2"
file = "/emulator/hd1.image"
file = "/emulator/hd1.ima"
file = "/emulator/hd1.imd"
file = "/emulator/hd1.img"
file = "/emulator/hd1.msa"
file = "/emulator/hd1.pfdc"
file = "/emulator/hd1.psi"
file = "/emulator/hd1.raw"
file = "/emulator/hd1.st"
file = "/emulator/hd1.stx"
file = "/emulator/hd1.tc"
file = "/emulator/hd1.td0"
file = "/emulator/hd1.xdf"
file = "/emulator/hd1"
optional = 1
}
disk {
drive = 0x81
type = "auto"
file = "/emulator/hd2.dsk"
file = "/emulator/hd2.ana"
file = "/emulator/hd2.cp2"
file = "/emulator/hd2.image"
file = "/emulator/hd2.ima"
file = "/emulator/hd2.imd"
file = "/emulator/hd2.img"
file = "/emulator/hd2.msa"
file = "/emulator/hd2.pfdc"
file = "/emulator/hd2.psi"
file = "/emulator/hd2.raw"
file = "/emulator/hd2.st"
file = "/emulator/hd2.stx"
file = "/emulator/hd2.tc"
file = "/emulator/hd2.td0"
file = "/emulator/hd2.xdf"
file = "/emulator/hd2"
optional = 1
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,21 @@
{
"name": "PCE Mac Plus",
"native_resolution": [
512,
342
],
"peripherals": [
"fd1",
"fd2",
"fd3",
"hd1",
"hd2"
],
"bios_filenames": [
"pce-macplus.rom",
"pce-macplus-pcex.rom",
"pce-macplus-pram.dat"
],
"js_filename": "pce-macplus.js.gz",
"driver": "macplus"
}

108
files.xml Normal file
View File

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<files>
<file name="00_coverscreenshot.jpg" source="original">
<mtime>1491281464</mtime>
<size>52120</size>
<format>JPEG</format>
<rotation>0</rotation>
<md5>7d245fb52df6210d6cdfb9b167d46cb3</md5>
<crc32>fd17335d</crc32>
<sha1>22bc557b1b0a37a00bfadad1ee2d2e4411f7f2ca</sha1>
</file>
<file name="00_coverscreenshot_thumb.jpg" source="derivative">
<format>JPEG Thumb</format>
<original>00_coverscreenshot.jpg</original>
<mtime>1491281490</mtime>
<size>3068</size>
<md5>cd861d5b5e77c8447a8661fdd54b70e2</md5>
<crc32>9a2841e9</crc32>
<sha1>6ae3d31cc772641a74458e5071435b87cf7b0998</sha1>
</file>
<file name="_screenshot.gif" source="original">
<mtime>1491281475</mtime>
<size>64231</size>
<format>Emulator Screenshot</format>
<md5>a93f87da33f88775be5196285159fb94</md5>
<crc32>233eef7b</crc32>
<sha1>6eb6b1c18f890f3f54a353f087403abcb5482f7b</sha1>
</file>
<file name="hd1.img" source="original">
<mtime>1491279141</mtime>
<size>21411840</size>
<md5>7f9ae888ff116dbf388a5a265315525e</md5>
<crc32>7e0b2118</crc32>
<sha1>2f5ac4d2364b24f64ac56374cb83ab7e869d301c</sha1>
<format>ISO Image</format>
</file>
<file name="hd2.img" source="original">
<mtime>1491279155</mtime>
<size>21411840</size>
<md5>5a0704eb58dfb7ec5c42479c14f1435a</md5>
<crc32>dc864bc8</crc32>
<sha1>156f3642a3461bd9a31db9bfc543cde52ee884b1</sha1>
<format>ISO Image</format>
</file>
<file name="mac_MacOS_7.0.1_compilation.gif" source="original">
<mtime>1491281471</mtime>
<size>4301</size>
<format>Animated GIF</format>
<md5>4ce478db0d501bc77205a747c7bf9dec</md5>
<crc32>58bb3164</crc32>
<sha1>fada40476b84bad63b3c837b952384fcc0afc712</sha1>
</file>
<file name="mac_MacOS_7.0.1_compilation_archive.torrent" source="metadata">
<btih>b8928d4e5b9e875512ec7da2a66e7787afa66853</btih>
<mtime>1523311943</mtime>
<size>4610</size>
<md5>12103f3d7ddc76d2a81b39796b91a346</md5>
<crc32>6013a406</crc32>
<sha1>f3ca17864e582dba60888dc2c217d30a20ec25de</sha1>
<format>Archive BitTorrent</format>
</file>
<file name="mac_MacOS_7.0.1_compilation_files.xml" source="original">
<format>Metadata</format>
<md5>e36da0f0f79475f7212db0af45376dc2</md5>
</file>
<file name="mac_MacOS_7.0.1_compilation_meta.sqlite" source="original">
<mtime>1491281477</mtime>
<size>14336</size>
<format>Metadata</format>
<md5>e232ddfdc5502ed04518ea9183b10697</md5>
<crc32>60e19f70</crc32>
<sha1>c75e69f8c5fb213a4fa1b94ef7f9b601dd742968</sha1>
</file>
<file name="mac_MacOS_7.0.1_compilation_meta.xml" source="original">
<mtime>1491284996</mtime>
<size>4295</size>
<format>Metadata</format>
<md5>46af4d68ad5d443ef487fb7aac42e85a</md5>
<crc32>bb798be6</crc32>
<sha1>fb689e72ea95333d787ea13dc2d7e8bc776fcda1</sha1>
</file>
<file name="mac_MacOS_7.0.1_compilation_reviews.xml" source="original">
<mtime>1523311942</mtime>
<size>2195</size>
<format>Metadata</format>
<md5>84d46daaf93a535d24e4664f0a429ca2</md5>
<crc32>81d6c029</crc32>
<sha1>606fcb53270afc7c1d21baf01aa6bad542b4679b</sha1>
</file>
<file name="screenshot_00.jpg" source="original">
<mtime>1491281467</mtime>
<size>52120</size>
<md5>7d245fb52df6210d6cdfb9b167d46cb3</md5>
<crc32>fd17335d</crc32>
<sha1>22bc557b1b0a37a00bfadad1ee2d2e4411f7f2ca</sha1>
<format>JPEG</format>
<rotation>0</rotation>
</file>
<file name="screenshot_00_thumb.jpg" source="derivative">
<format>JPEG Thumb</format>
<original>screenshot_00.jpg</original>
<mtime>1491281491</mtime>
<size>3068</size>
<md5>cd861d5b5e77c8447a8661fdd54b70e2</md5>
<crc32>9a2841e9</crc32>
<sha1>6ae3d31cc772641a74458e5071435b87cf7b0998</sha1>
</file>
</files>

BIN
happy-mac.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

131
index.html Normal file
View File

@ -0,0 +1,131 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>System 7</title>
<meta name="viewport" content="initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, width=device-width, height=device-height">
<link rel="manifest" href="manifest.json">
<script>window.archive_setup=[]</script>
<script src="index_files/jquery-1.js"></script>
<script src="index_files/bootstrap.js"></script>
<script src="index_files/jwplayer.js"></script>
<script src="index_files/react.js"></script>
<script src="index_files/react-dom.js"></script>
<script src="index_files/play8.js"></script>
<script src="index_files/playset.js"></script>
<script src="index_files/polyfill.js"></script>
<script src="index_files/archive.js"></script>
<script src="index_files/loader.js"></script>
<script src="index_files/browserfs.js"></script>
<script src="pressure-v2.1.2.js"></script>
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-title" content="System 7">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<meta name="description" content="This pair of compilation hard drives contains a full copy of MacOS 7.0.1, along with a range of games, applications, utilities and toys to demonstrate the...">
<meta property="og:title" content="MacOS System 7.0.1 Compilation : Apple Computer : Free Download, Borrow, and Streaming : Internet Archive">
<meta property="og:description" content="This pair of compilation hard drives contains a full copy of MacOS 7.0.1, along with a range of games, applications, utilities and toys to demonstrate the...">
<meta property="og:site_name" content="Internet Archive">
<meta property="og:image" content="https://archive.org/services/img/mac_MacOS_7.0.1_compilation">
<meta property="og:url" content="https://archive.org/details/mac_MacOS_7.0.1_compilation">
<link rel="canonical" href="https://archive.org/details/mac_MacOS_7.0.1_compilation">
<link href="index_files/archive.css" rel="stylesheet" type="text/css">
</head>
<body class="navia embedded ia-module tiles">
<!-- Wraps all page content -->
<div id="wrap">
<!--HTML-->
<div id="emulate">
<div id="canvasholder">
<canvas id="canvas" style="width:100%;height:100%" width="300" height="150"></canvas>
<div id="gamepadtext"></div>
<button id="keyboardBtn" onclick="keyboardBtnClicked()">⌨️</button> <!-- keyboard emoji -->
<input id="keyboardInput" type="text">
</div>
</div><!--/#emulate-->
<style>
body.embedded {
background-color:black;
}
#emulate {
display: flex;
justify-content: center;
align-items: center;
}
#canvas {
/*cursor: none;*/
}
#keyboardBtn {
width: 20%;
float: right;
}
#keyboardInput {
visibility: hidden;
}
img.emularity-splash-image {
display: none !important;
}
</style>
<script>
"use strict";
if ("standalone" in navigator && !navigator.standalone) {
alert("Add to Home Screen to be able to use it!");
return;
}
AJS.emulate_setup({"url":"\/stream\/mac_MacOS_7.0.1_compilation?module=pce-macplus&scale=1","identifier":"mac_MacOS_7.0.1_compilation","module":"pce-macplus","scale":"1","screenshot":"\/serve\/mac_MacOS_7.0.1_compilation\/_screenshot.gif"});
AJS.emulate();
// prevIsDeep is to be saved by pce-macplus.js
var prevIsDeep = false, isDeep = false;
Pressure.set("#canvas", {
start: function(event){
// this is called on force start
},
end: function(){
// this is called on force end
},
startDeepPress: function(event) {
// this is called on "force click" / "deep press", aka once the force is greater than 0.5
console.log("deeeeeep");
isDeep = true;
},
endDeepPress: function(){
// this is called when the "force click" / "deep press" end
console.log("shalloooow");
isDeep = false;
},
change: function(force, event) {
// this is called every time there is a change in pressure
// force will always be a value from 0 to 1 on mobile and desktop
},
unsupported: function(){
// NOTE: this is only called if the polyfill option is disabled!
// this is called once there is a touch on the element and the device or browser does not support Force or 3D touch
}
});
function keyboardBtnClicked() {
document.getElementById("keyboardInput").focus();
}
</script>
</div>
</body>
</html>

BIN
index_files/_screenshot.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

270
index_files/analytics.js Normal file
View File

@ -0,0 +1,270 @@
/* eslint-disable no-var, semi, prefer-arrow-callback, prefer-template */
/**
* Collection of methods for sending analytics events to Archive.org's analytics server.
*
* These events are used for internal stats and sent (in anonymized form) to Google Analytics.
*
* @see analytics.md
*
* @type {Object}
*/
window.archive_analytics = (function defineArchiveAnalytics() {
var DEFAULT_SERVICE = 'ao_2';
var startTime = new Date();
/**
* @return {Boolean}
*/
function isPerformanceTimingApiSupported() {
return 'performance' in window && 'timing' in window.performance;
}
/**
* Determines how many milliseconds elapsed between the browser starting to parse the DOM and
* the current time.
*
* Uses the Performance API or a fallback value if it's not available.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number}
*/
function getLoadTime() {
var start;
if (isPerformanceTimingApiSupported())
start = window.performance.timing.domLoading;
else
start = startTime.getTime();
return new Date().getTime() - start;
}
/**
* Determines how many milliseconds elapsed between the user navigating to the page and
* the current time.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API
*
* @return {Number|null} null if the browser doesn't support the Performance API
*/
function getNavToDoneTime() {
if (!isPerformanceTimingApiSupported())
return null;
return new Date().getTime() - window.performance.timing.navigationStart;
}
/**
* Performs an arithmetic calculation on a string with a number and unit, while maintaining
* the unit.
*
* @param {String} original value to modify, with a unit
* @param {Function} doOperation accepts one Number parameter, returns a Number
* @returns {String}
*/
function computeWithUnit(original, doOperation) {
var number = parseFloat(original, 10);
var unit = original.replace(/(\d*\.\d+)|\d+/, '');
return doOperation(number) + unit;
}
/**
* Computes the default font size of the browser.
*
* @returns {String|null} computed font-size with units (typically pixels), null if it cannot be computed
*/
function getDefaultFontSize() {
var fontSizeStr;
if (!('getComputedStyle' in window))
return null;
fontSizeStr = window.getComputedStyle(document.documentElement).fontSize;
// Don't modify the value if tracking book reader.
if (document.documentElement.classList.contains('BookReaderRoot'))
return fontSizeStr;
return computeWithUnit(fontSizeStr, function reverseBootstrapFontSize(number) {
// Undo the 62.5% size applied in the Bootstrap CSS.
return number * 1.6;
});
}
return {
/**
* @type {String|null}
*/
service: null,
/**
* Key-value pairs to send in pageviews (you can read this after a pageview to see what was
* sent).
*
* @type {Object}
*/
values: {},
/**
* @param {Object} values
* @param {Function} [onload_callback] (deprecated) callback to invoke once ping to analytics server is done
* @param {Boolean} [augment_for_ao_site] (deprecated) if true, add some archive.org site-specific values
*/
send_ping: function send_ping(values, onload_callback, augment_for_ao_site) {
var img_src = "//analytics.archive.org/0.gif";
if (!values)
values = {};
function format_ping(values) {
var ret = [];
var count = 2;
var version = 2;
for (var data in values) {
ret.push(encodeURIComponent(data) + "=" + encodeURIComponent(values[data]));
count = count + 1;
}
ret.push('version=' + version);
ret.push('count=' + count);
return ret.join("&");
}
// Automatically set service.
if (!values.service && this.service)
values.service = this.service;
if (augment_for_ao_site && !values.service)
values.service = DEFAULT_SERVICE;
var string = format_ping(values);
var loadtime_img = new Image(100,25);
if (onload_callback && typeof(onload_callback)=='function')
loadtime_img.onload = onload_callback;
loadtime_img.src = img_src + "?" + string;
},
send_scroll_fetch_event: function send_scroll_fetch_event(page) {
var values = {
kind: 'event',
ec: 'page_action',
ea: 'scroll_fetch',
el: location.pathname,
ev: page, // int
cache_bust: Math.random()
};
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime)
values.loadtime = loadTime;
if (navToDoneTime)
values.nav_to_done_ms = navToDoneTime;
this.send_ping(values);
},
send_scroll_fetch_base_event: function send_scroll_fetch_base_event() {
var values = {
kind: 'event',
ec: 'page_action',
ea: 'scroll_fetch_base',
el: location.pathname,
cache_bust: Math.random(),
};
var loadTime = getLoadTime();
var navToDoneTime = getNavToDoneTime();
if (loadTime)
values.loadtime = loadTime;
if (navToDoneTime)
values.nav_to_done_ms = navToDoneTime;
this.send_ping(values);
},
/**
* @param {Object} options
* @param {String} [options.mediaType]
*/
send_pageview: function send_pageview(options) {
var settings = options || {};
var defaultFontSize;
var loadTime = getLoadTime();
var mediaType = settings.mediaType;
var navToDoneTime = getNavToDoneTime();
/**
* @return {String}
*/
function get_locale() {
if (navigator) {
if (navigator.language)
return navigator.language;
else if (navigator.browserLanguage)
return navigator.browserLanguage;
else if (navigator.systemLanguage)
return navigator.systemLanguage;
else if (navigator.userLanguage)
return navigator.userLanguage;
}
return '';
}
defaultFontSize = getDefaultFontSize();
// Set field values
this.values.kind = 'pageview';
this.values.timediff = (new Date().getTimezoneOffset()/60)*(-1); // *timezone* diff from UTC
this.values.locale = get_locale();
this.values.referrer = (document.referrer == '' ? '-' : document.referrer);
if (loadTime)
this.values.loadtime = loadTime;
if (navToDoneTime)
this.values.nav_to_done_ms = navToDoneTime;
if (defaultFontSize)
this.values.ga_cd1 = defaultFontSize;
if ('devicePixelRatio' in window)
this.values.ga_cd2 = window.devicePixelRatio;
if (mediaType)
this.values.ga_cd3 = mediaType;
this.send_ping(this.values);
},
/**
* @param {Object} options see this.send_pageview options
*/
send_pageview_on_load: function send_pageview_on_load(options) {
var self = this;
window.addEventListener('load', function send_pageview_with_options() {
self.send_pageview(options);
});
},
/**
* @returns {Object[]}
*/
get_data_packets: function get_data_packets() {
return [this.values];
},
};
}());

13212
index_files/archive.css Normal file

File diff suppressed because it is too large Load Diff

21
index_files/archive.js Normal file

File diff suppressed because one or more lines are too long

11
index_files/bootstrap.js vendored Normal file

File diff suppressed because one or more lines are too long

14
index_files/browserfs.js Normal file

File diff suppressed because one or more lines are too long

6
index_files/jquery-1.js vendored Normal file

File diff suppressed because one or more lines are too long

95
index_files/jwplayer.js Normal file

File diff suppressed because one or more lines are too long

1754
index_files/loader.js Normal file

File diff suppressed because it is too large Load Diff

2
index_files/play8.js Normal file

File diff suppressed because one or more lines are too long

2
index_files/playset.js Normal file

File diff suppressed because one or more lines are too long

2
index_files/polyfill.js Normal file

File diff suppressed because one or more lines are too long

12
index_files/react-dom.js vendored Normal file
View File

@ -0,0 +1,12 @@
/**
* ReactDOM v15.2.0
*
* Copyright 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e(require("react"));else if("function"==typeof define&&define.amd)define(["react"],e);else{var f;f="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,f.ReactDOM=e(f.React)}}(function(e){return e.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED});

16
index_files/react.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
index_files/start.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Binary file not shown.

6
manifest.json Normal file
View File

@ -0,0 +1,6 @@
{
"name": "System 7",
"display": "fullscreen",
"orientation": "landscape",
"start_url": "/index.html"
}

20
meta.xml Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<identifier>mac_MacOS_7.0.1_compilation</identifier>
<collection>softwarelibrary_mac</collection>
<emulator>pce-macplus</emulator>
<emulator_ext>img</emulator_ext>
<mediatype>software</mediatype>
<scanner>Internet Archive Python library 1.4.0</scanner>
<title>MacOS System 7.0.1 Compilation</title>
<publicdate>2017-04-04 04:12:22</publicdate>
<uploader>jscott@archive.org</uploader>
<addeddate>2017-04-04 04:12:22</addeddate>
<collection>softwarelibrary</collection>
<pce_drive_hd1>hd1.img</pce_drive_hd1>
<pce_drive_hd2>hd2.img</pce_drive_hd2>
<creator>Apple Computer</creator>
<description>This pair of compilation hard drives contains a full copy of MacOS 7.0.1, along with a range of games, applications, utilities and toys to demonstrate the experience of using an early Macintosh computer.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;System Programs: &lt;/b&gt;HyperCard, Macintosh Basics, Control Panels.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Applications: &lt;/b&gt;BBEdit Lite, MacDraw, MacPaint, Microsoft Excel, Microsoft Word, Microsoft Works, Orion, Pagemaker, ZTerm.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Games: &lt;/b&gt;Risk, Cannon Fodder, Shufflepuck.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Utilities: &lt;/b&gt;HD Setup, Disinfectant, Disk Copy, ResEdit, TeachText, Compact Pro, Mac Gzip, Mar, Stuffit Expander, Stuffit Lite.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Toys: &lt;/b&gt;Alarm Clock, Calculator, Note Pad, Puzzle, Scrapbook.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;General History:&lt;/i&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;System 7 (codenamed "Big Bang" and sometimes retrospectively called Mac OS 7) is a single-user graphical user interface-based operating system for Macintosh computers and was part of the classic Mac OS line of operating systems. It was introduced on May 13, 1991, by Apple Computer. It succeeded System 6, and was the main Macintosh operating system until it was succeeded by Mac OS 8 in 1997. Features added with the System 7 release included virtual memory, personal file sharing, QuickTime, QuickDraw 3D, and an improved user interface.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"System 7" is often used generically to refer to all 7.x versions. With the release of version 7.6 in 1997, Apple officially renamed the operating system "Mac OS", a name which had first appeared on System 7.5.1's boot screen. System 7 was developed for Macs that used the Motorola 680x0 line of processors, but was ported to the PowerPC after Apple adopted the new processor.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;System 7 was the first Apple operating system to be available on CD, although it shipped on a set of 15 floppy disks initially. Unlike earlier systems, System 7 itself did not come bundled with major software packages. Newly purchased Macintosh computers had System 7 installed and were often bundled with software such as HyperCard, At Ease and Mouse Practice. Later, the Macintosh Performa series added various software bundles including third-party software such as ClarisWorks, The New Grolier Multimedia Encyclopedia, Microsoft Bookshelf, Spectre VR and Power Pete. Since System 7 was introduced before the Internet came to popular attention, software such as MacTCP, FreePPP and Netscape were not included at first, but was later available on disk from Internet service providers and bundled with books such as Adam C. Engst's Internet Starter Kit for Macintosh. PowerPC Macintoshes included Graphing Calculator. System 7 also included AppleTalk networking and file sharing software in the form of system extensions and control panels.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The basic utilities installed by default with System 7 included TeachText (superseded by the more flexible SimpleText in later versions) for basic text editing tasks and reading readme documents. Also available on the additional "Disk Tools" floppy disk are Disk First Aid for disk repair and Apple HD SC Setup for initializing and partitioning disks.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
<date>1991</date>
<year>1991</year>
</metadata>

BIN
other_logos/dosbox.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 B

BIN
other_logos/mame.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

BIN
other_logos/pce.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
other_logos/sae.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

576
pressure-v2.1.2.js Normal file
View File

@ -0,0 +1,576 @@
// Pressure v2.1.2 | Created By Stuart Yamartino | MIT License | 2015 - 2017
;(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define([], factory);
} else if (typeof exports === 'object') {
module.exports = factory();
} else {
root.Pressure = factory();
}
}(this, function() {
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
//--------------------- Public API Section ---------------------//
// this is the Pressure Object, this is the only object that is accessible to the end user
// only the methods in this object can be called, making it the "public api"
var Pressure = {
// targets any device with Force or 3D Touch
set: function set(selector, closure, options) {
loopPressureElements(selector, closure, options);
},
// set configuration options for global config
config: function config(options) {
Config.set(options);
},
// the map method allows for interpolating a value from one range of values to another
// example from the Arduino documentation: https://www.arduino.cc/en/Reference/Map
map: function map(x, in_min, in_max, out_min, out_max) {
return _map.apply(null, arguments);
}
};
var Element = function () {
function Element(el, block, options) {
_classCallCheck(this, Element);
this.routeEvents(el, block, options);
this.preventSelect(el, options);
}
_createClass(Element, [{
key: 'routeEvents',
value: function routeEvents(el, block, options) {
var type = Config.get('only', options);
// for devices that support pointer events
if (supportsPointer && (type === 'pointer' || type === null)) {
this.adapter = new AdapterPointer(el, block, options).bindEvents();
}
// for devices that support 3D Touch
else if (supportsTouch && (type === 'touch' || type === null)) {
this.adapter = new Adapter3DTouch(el, block, options).bindEvents();
}
// for devices that support Force Touch
else if (supportsMouse && (type === 'mouse' || type === null)) {
this.adapter = new AdapterForceTouch(el, block, options).bindEvents();
}
// unsupported if it is requesting a type and your browser is of other type
else {
this.adapter = new Adapter(el, block).bindUnsupportedEvent();
}
}
// prevent the default action of text selection, "peak & pop", and force touch special feature
}, {
key: 'preventSelect',
value: function preventSelect(el, options) {
if (Config.get('preventSelect', options)) {
el.style.webkitTouchCallout = "none";
el.style.webkitUserSelect = "none";
el.style.khtmlUserSelect = "none";
el.style.MozUserSelect = "none";
el.style.msUserSelect = "none";
el.style.userSelect = "none";
}
}
}]);
return Element;
}();
/*
This is the base adapter from which all the other adapters extend.
*/
var Adapter = function () {
function Adapter(el, block, options) {
_classCallCheck(this, Adapter);
this.el = el;
this.block = block;
this.options = options;
this.pressed = false;
this.deepPressed = false;
this.nativeSupport = false;
this.runningPolyfill = false;
this.runKey = Math.random();
}
_createClass(Adapter, [{
key: 'setPressed',
value: function setPressed(boolean) {
this.pressed = boolean;
}
}, {
key: 'setDeepPressed',
value: function setDeepPressed(boolean) {
this.deepPressed = boolean;
}
}, {
key: 'isPressed',
value: function isPressed() {
return this.pressed;
}
}, {
key: 'isDeepPressed',
value: function isDeepPressed() {
return this.deepPressed;
}
}, {
key: 'add',
value: function add(event, set) {
this.el.addEventListener(event, set, false);
}
}, {
key: 'runClosure',
value: function runClosure(method) {
if (method in this.block) {
// call the closure method and apply nth arguments if they exist
this.block[method].apply(this.el, Array.prototype.slice.call(arguments, 1));
}
}
}, {
key: 'fail',
value: function fail(event, runKey) {
if (Config.get('polyfill', this.options)) {
if (this.runKey === runKey) {
this.runPolyfill(event);
}
} else {
this.runClosure('unsupported', event);
}
}
}, {
key: 'bindUnsupportedEvent',
value: function bindUnsupportedEvent() {
var _this = this;
this.add(supportsTouch ? 'touchstart' : 'mousedown', function (event) {
return _this.runClosure('unsupported', event);
});
}
}, {
key: '_startPress',
value: function _startPress(event) {
if (this.isPressed() === false) {
this.runningPolyfill = false;
this.setPressed(true);
this.runClosure('start', event);
}
}
}, {
key: '_startDeepPress',
value: function _startDeepPress(event) {
if (this.isPressed() && this.isDeepPressed() === false) {
this.setDeepPressed(true);
this.runClosure('startDeepPress', event);
}
}
}, {
key: '_changePress',
value: function _changePress(force, event) {
this.nativeSupport = true;
this.runClosure('change', force, event);
}
}, {
key: '_endDeepPress',
value: function _endDeepPress() {
if (this.isPressed() && this.isDeepPressed()) {
this.setDeepPressed(false);
this.runClosure('endDeepPress');
}
}
}, {
key: '_endPress',
value: function _endPress() {
if (this.runningPolyfill === false) {
if (this.isPressed()) {
this._endDeepPress();
this.setPressed(false);
this.runClosure('end');
}
this.runKey = Math.random();
this.nativeSupport = false;
} else {
this.setPressed(false);
}
}
}, {
key: 'deepPress',
value: function deepPress(force, event) {
force >= 0.5 ? this._startDeepPress(event) : this._endDeepPress();
}
}, {
key: 'runPolyfill',
value: function runPolyfill(event) {
this.increment = Config.get('polyfillSpeedUp', this.options) === 0 ? 1 : 10 / Config.get('polyfillSpeedUp', this.options);
this.decrement = Config.get('polyfillSpeedDown', this.options) === 0 ? 1 : 10 / Config.get('polyfillSpeedDown', this.options);
this.setPressed(true);
this.runClosure('start', event);
if (this.runningPolyfill === false) {
this.loopPolyfillForce(0, event);
}
}
}, {
key: 'loopPolyfillForce',
value: function loopPolyfillForce(force, event) {
if (this.nativeSupport === false) {
if (this.isPressed()) {
this.runningPolyfill = true;
force = force + this.increment > 1 ? 1 : force + this.increment;
this.runClosure('change', force, event);
this.deepPress(force, event);
setTimeout(this.loopPolyfillForce.bind(this, force, event), 10);
} else {
force = force - this.decrement < 0 ? 0 : force - this.decrement;
if (force < 0.5 && this.isDeepPressed()) {
this.setDeepPressed(false);
this.runClosure('endDeepPress');
}
if (force === 0) {
this.runningPolyfill = false;
this.setPressed(true);
this._endPress();
} else {
this.runClosure('change', force, event);
this.deepPress(force, event);
setTimeout(this.loopPolyfillForce.bind(this, force, event), 10);
}
}
}
}
}]);
return Adapter;
}();
/*
This adapter is for Macs with Force Touch trackpads.
*/
var AdapterForceTouch = function (_Adapter) {
_inherits(AdapterForceTouch, _Adapter);
function AdapterForceTouch(el, block, options) {
_classCallCheck(this, AdapterForceTouch);
return _possibleConstructorReturn(this, (AdapterForceTouch.__proto__ || Object.getPrototypeOf(AdapterForceTouch)).call(this, el, block, options));
}
_createClass(AdapterForceTouch, [{
key: 'bindEvents',
value: function bindEvents() {
this.add('webkitmouseforcewillbegin', this._startPress.bind(this));
this.add('mousedown', this.support.bind(this));
this.add('webkitmouseforcechanged', this.change.bind(this));
this.add('webkitmouseforcedown', this._startDeepPress.bind(this));
this.add('webkitmouseforceup', this._endDeepPress.bind(this));
this.add('mouseleave', this._endPress.bind(this));
this.add('mouseup', this._endPress.bind(this));
}
}, {
key: 'support',
value: function support(event) {
if (this.isPressed() === false) {
this.fail(event, this.runKey);
}
}
}, {
key: 'change',
value: function change(event) {
if (this.isPressed() && event.webkitForce > 0) {
this._changePress(this.normalizeForce(event.webkitForce), event);
}
}
// make the force the standard 0 to 1 scale and not the 1 to 3 scale
}, {
key: 'normalizeForce',
value: function normalizeForce(force) {
return this.reachOne(_map(force, 1, 3, 0, 1));
}
// if the force value is above 0.995 set the force to 1
}, {
key: 'reachOne',
value: function reachOne(force) {
return force > 0.995 ? 1 : force;
}
}]);
return AdapterForceTouch;
}(Adapter);
/*
This adapter is more mobile devices that support 3D Touch.
*/
var Adapter3DTouch = function (_Adapter2) {
_inherits(Adapter3DTouch, _Adapter2);
function Adapter3DTouch(el, block, options) {
_classCallCheck(this, Adapter3DTouch);
return _possibleConstructorReturn(this, (Adapter3DTouch.__proto__ || Object.getPrototypeOf(Adapter3DTouch)).call(this, el, block, options));
}
_createClass(Adapter3DTouch, [{
key: 'bindEvents',
value: function bindEvents() {
if (supportsTouchForceChange) {
this.add('touchforcechange', this.start.bind(this));
this.add('touchstart', this.support.bind(this, 0));
this.add('touchend', this._endPress.bind(this));
} else {
this.add('touchstart', this.startLegacy.bind(this));
this.add('touchend', this._endPress.bind(this));
}
}
}, {
key: 'start',
value: function start(event) {
if (event.touches.length > 0) {
this._startPress(event);
this.touch = this.selectTouch(event);
if (this.touch) {
this._changePress(this.touch.force, event);
}
}
}
}, {
key: 'support',
value: function support(iter, event) {
var runKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.runKey;
if (this.isPressed() === false) {
if (iter <= 6) {
iter++;
setTimeout(this.support.bind(this, iter, event, runKey), 10);
} else {
this.fail(event, runKey);
}
}
}
}, {
key: 'startLegacy',
value: function startLegacy(event) {
this.initialForce = event.touches[0].force;
this.supportLegacy(0, event, this.runKey, this.initialForce);
}
// this checks up to 6 times on a touch to see if the touch can read a force value
// if the force value has changed it means the device supports pressure
// more info from this issue https://github.com/yamartino/pressure/issues/15
}, {
key: 'supportLegacy',
value: function supportLegacy(iter, event, runKey, force) {
if (force !== this.initialForce) {
this._startPress(event);
this.loopForce(event);
} else if (iter <= 6) {
iter++;
setTimeout(this.supportLegacy.bind(this, iter, event, runKey, force), 10);
} else {
this.fail(event, runKey);
}
}
}, {
key: 'loopForce',
value: function loopForce(event) {
if (this.isPressed()) {
this.touch = this.selectTouch(event);
setTimeout(this.loopForce.bind(this, event), 10);
this._changePress(this.touch.force, event);
}
}
// link up the touch point to the correct element, this is to support multitouch
}, {
key: 'selectTouch',
value: function selectTouch(event) {
if (event.touches.length === 1) {
return this.returnTouch(event.touches[0], event);
} else {
for (var i = 0; i < event.touches.length; i++) {
// if the target press is on this element
if (event.touches[i].target === this.el || this.el.contains(event.touches[i].target)) {
return this.returnTouch(event.touches[i], event);
}
}
}
}
// return the touch and run a start or end for deep press
}, {
key: 'returnTouch',
value: function returnTouch(touch, event) {
this.deepPress(touch.force, event);
return touch;
}
}]);
return Adapter3DTouch;
}(Adapter);
/*
This adapter is for devices that support pointer events.
*/
var AdapterPointer = function (_Adapter3) {
_inherits(AdapterPointer, _Adapter3);
function AdapterPointer(el, block, options) {
_classCallCheck(this, AdapterPointer);
return _possibleConstructorReturn(this, (AdapterPointer.__proto__ || Object.getPrototypeOf(AdapterPointer)).call(this, el, block, options));
}
_createClass(AdapterPointer, [{
key: 'bindEvents',
value: function bindEvents() {
this.add('pointerdown', this.support.bind(this));
this.add('pointermove', this.change.bind(this));
this.add('pointerup', this._endPress.bind(this));
this.add('pointerleave', this._endPress.bind(this));
}
}, {
key: 'support',
value: function support(event) {
if (this.isPressed() === false) {
if (event.pressure === 0 || event.pressure === 0.5 || event.pressure > 1) {
this.fail(event, this.runKey);
} else {
this._startPress(event);
this._changePress(event.pressure, event);
}
}
}
}, {
key: 'change',
value: function change(event) {
if (this.isPressed() && event.pressure > 0 && event.pressure !== 0.5) {
this._changePress(event.pressure, event);
this.deepPress(event.pressure, event);
}
}
}]);
return AdapterPointer;
}(Adapter);
// This class holds the states of the the Pressure config
var Config = {
// 'false' will make polyfill not run when pressure is not supported and the 'unsupported' method will be called
polyfill: true,
// milliseconds it takes to go from 0 to 1 for the polyfill
polyfillSpeedUp: 1000,
// milliseconds it takes to go from 1 to 0 for the polyfill
polyfillSpeedDown: 0,
// 'true' prevents the selecting of text and images via css properties
preventSelect: true,
// 'touch', 'mouse', or 'pointer' will make it run only on that type of device
only: null,
// this will get the correct config / option settings for the current pressure check
get: function get(option, options) {
return options.hasOwnProperty(option) ? options[option] : this[option];
},
// this will set the global configs
set: function set(options) {
for (var k in options) {
if (options.hasOwnProperty(k) && this.hasOwnProperty(k) && k != 'get' && k != 'set') {
this[k] = options[k];
}
}
}
};
//------------------- Helpers -------------------//
// accepts jQuery object, node list, string selector, then called a setup for each element
var loopPressureElements = function loopPressureElements(selector, closure) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
// if a string is passed in as an element
if (typeof selector === 'string' || selector instanceof String) {
var elements = document.querySelectorAll(selector);
for (var i = 0; i < elements.length; i++) {
new Element(elements[i], closure, options);
}
// if a single element object is passed in
} else if (isElement(selector)) {
new Element(selector, closure, options);
// if a node list is passed in ex. jQuery $() object
} else {
for (var i = 0; i < selector.length; i++) {
new Element(selector[i], closure, options);
}
}
};
//Returns true if it is a DOM element
var isElement = function isElement(o) {
return (typeof HTMLElement === 'undefined' ? 'undefined' : _typeof(HTMLElement)) === "object" ? o instanceof HTMLElement : //DOM2
o && (typeof o === 'undefined' ? 'undefined' : _typeof(o)) === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string";
};
// the map method allows for interpolating a value from one range of values to another
// example from the Arduino documentation: https://www.arduino.cc/en/Reference/Map
var _map = function _map(x, in_min, in_max, out_min, out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
};
var supportsMouse = false