mirror of https://github.com/mrkite/regs.git
initial import
This commit is contained in:
commit
2154a1a7e3
|
@ -0,0 +1,7 @@
|
|||
*.o
|
||||
*.swp
|
||||
*.map
|
||||
seg*
|
||||
2mg
|
||||
omf
|
||||
regs
|
|
@ -0,0 +1,312 @@
|
|||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* Extracts 2mg and other prodos disk images into a directory structure
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <ctype.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <argp.h>
|
||||
#include <stdbool.h>
|
||||
#include "handle.h"
|
||||
|
||||
static void doDirectory(uint16_t key, uint8_t *disk, uint32_t disklen,
|
||||
int depth);
|
||||
static void doEntry(uint8_t *entry, uint8_t *disk, uint32_t disklen,
|
||||
int depth);
|
||||
static void doFile(uint16_t key, uint32_t len, char *name, uint8_t *disk,
|
||||
uint32_t disklen, int type);
|
||||
static void doGSOS(uint16_t key, char *name, uint8_t *disk, uint32_t disklen,
|
||||
int depth);
|
||||
|
||||
const char *argp_program_version = "2mg 0.2";
|
||||
const char *argp_program_bug_address = "sean@seancode.com";
|
||||
static char doc[] = "Extract ProDOS disk images";
|
||||
static char args_doc[] = "DISKIMAGE";
|
||||
static struct argp_option options[] = {
|
||||
{"list", 'l', 0, 0, "List files"},
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
struct arguments {
|
||||
char *diskimage;
|
||||
bool list;
|
||||
};
|
||||
|
||||
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
||||
struct arguments *arguments = state->input;
|
||||
switch (key) {
|
||||
case 'l':
|
||||
arguments->list = true;
|
||||
break;
|
||||
case ARGP_KEY_ARG:
|
||||
if (state->arg_num >= 1) {
|
||||
argp_usage(state);
|
||||
}
|
||||
arguments->diskimage = arg;
|
||||
break;
|
||||
case ARGP_KEY_END:
|
||||
if (state->arg_num < 1) {
|
||||
argp_usage(state);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return ARGP_ERR_UNKNOWN;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct argp argp = { options, parse_opt, args_doc, doc };
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
struct arguments arguments;
|
||||
arguments.list = false;
|
||||
|
||||
argp_parse(&argp, argc, argv, 0, 0, &arguments);
|
||||
|
||||
FILE *f = fopen(arguments.diskimage, "rb");
|
||||
if (!f) {
|
||||
fprintf(stderr, "Failed to open '%s'\n", arguments.diskimage);
|
||||
return -1;
|
||||
}
|
||||
fseek(f, 0, SEEK_END);
|
||||
size_t len = ftell(f);
|
||||
fseek(f, 0, SEEK_SET);
|
||||
if (len < 64) {
|
||||
fprintf(stderr, "%s is not a valid disk image\n", argv[1]);
|
||||
fclose(f);
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint8_t *header = malloc(64);
|
||||
fread(header, 64, 1, f);
|
||||
|
||||
uint32_t disklen = len;
|
||||
uint32_t diskofs = 0;
|
||||
|
||||
if (r4(header) == fourcc("2IMG")) {
|
||||
if (r32(header + 0xc) != 1) {
|
||||
fprintf(stderr, "Not a ProDOS disk image\n");
|
||||
fclose(f);
|
||||
return -1;
|
||||
}
|
||||
disklen = r32(header + 0x14) * 512;
|
||||
diskofs = r32(header + 0x18);
|
||||
}
|
||||
free(header);
|
||||
|
||||
fseek(f, diskofs, SEEK_SET);
|
||||
uint8_t *disk = malloc(disklen);
|
||||
fread(disk, disklen, 1, f);
|
||||
fclose(f);
|
||||
|
||||
doDirectory(2, disk, disklen, arguments.list ? 0 : -1);
|
||||
free(disk);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void readFilename(uint8_t *filename, uint8_t length, char *outname) {
|
||||
for (int i = 0; i < length; i++) {
|
||||
char ch = filename[i];
|
||||
if (isalnum(ch) || ch == '_' || ch == '.' || ch == ' ') {
|
||||
*outname++ = ch;
|
||||
} else {
|
||||
*outname++ = 'x';
|
||||
char hi = ch >> 4;
|
||||
char lo = ch & 0xf;
|
||||
if (hi > 9) {
|
||||
*outname++ = 'a' + (hi - 10);
|
||||
} else {
|
||||
*outname++ = '0' + hi;
|
||||
}
|
||||
if (lo > 9) {
|
||||
*outname++ = '0' + (lo - 10);
|
||||
} else {
|
||||
*outname++ = '0' + lo;
|
||||
}
|
||||
}
|
||||
}
|
||||
*outname = 0;
|
||||
}
|
||||
|
||||
static void indent(int depth) {
|
||||
for (int i = 0; i < depth; i++) {
|
||||
printf(" ");
|
||||
}
|
||||
}
|
||||
|
||||
static void doDirectory(uint16_t key, uint8_t *disk, uint32_t disklen,
|
||||
int depth) {
|
||||
uint8_t *block = disk + key * 512;
|
||||
if ((block[4] & 0xf0) != 0xf0 && (block[4] & 0xf0) != 0xe0) {
|
||||
fprintf(stderr, "Invalid ProDOS disk\n");
|
||||
return;
|
||||
}
|
||||
|
||||
char dirname[50];
|
||||
readFilename(block + 5, block[4] & 0xf, dirname);
|
||||
|
||||
if (depth < 0) {
|
||||
mkdir(dirname, 0777);
|
||||
chdir(dirname);
|
||||
} else {
|
||||
indent(depth);
|
||||
printf("%s <dir>\n", dirname);
|
||||
}
|
||||
|
||||
uint8_t entryLength = block[0x23];
|
||||
uint8_t entriesPerBlock = block[0x24];
|
||||
uint16_t fileCount = r16(block + 0x25);
|
||||
uint8_t *entry = block + entryLength + 4;
|
||||
uint8_t curEntry = 1;
|
||||
uint16_t curFile = 0;
|
||||
|
||||
while (curFile < fileCount) {
|
||||
if (entry[0] != 0) {
|
||||
doEntry(entry, disk, disklen, depth < 0 ? -1 : depth + 1);
|
||||
curFile++;
|
||||
}
|
||||
curEntry++;
|
||||
entry += entryLength;
|
||||
if (curEntry == entriesPerBlock) {
|
||||
curEntry = 0;
|
||||
block = disk + r16(block + 2) * 512;
|
||||
entry = block + 4;
|
||||
}
|
||||
}
|
||||
|
||||
if (depth < 0) {
|
||||
chdir("..");
|
||||
}
|
||||
}
|
||||
|
||||
static void doEntry(uint8_t *entry, uint8_t *disk, uint32_t disklen,
|
||||
int depth) {
|
||||
uint16_t key = r16(entry + 0x11);
|
||||
uint32_t eof = r24(entry + 0x15);
|
||||
|
||||
char filename[50];
|
||||
readFilename(entry + 1, entry[0] & 0xf, filename);
|
||||
|
||||
switch (entry[0] & 0xf0) {
|
||||
case 0x10: // seedling
|
||||
case 0x20: // sapling
|
||||
case 0x30: // tree
|
||||
if (depth < 0) {
|
||||
doFile(key, eof, filename, disk, disklen, entry[0] >> 4);
|
||||
} else {
|
||||
indent(depth);
|
||||
printf("%s %d bytes\n", filename, eof);
|
||||
}
|
||||
break;
|
||||
case 0x50:
|
||||
doGSOS(key, filename, disk, disklen, depth);
|
||||
break;
|
||||
case 0xd0:
|
||||
doDirectory(key, disk, disklen, depth < 0 ? -1 : depth + 1);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Unknown file type: %x\n", entry[0] & 0xf0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void dumpSeedling(uint8_t *block, uint32_t len, FILE *f) {
|
||||
if (block == NULL) {
|
||||
fseek(f, len, SEEK_CUR);
|
||||
} else {
|
||||
fwrite(block, len, 1, f);
|
||||
}
|
||||
}
|
||||
|
||||
static void dumpSapling(uint8_t *index, uint32_t len, FILE *f, uint8_t *disk,
|
||||
uint32_t disklen) {
|
||||
if (index == NULL) {
|
||||
fseek(f, len, SEEK_CUR);
|
||||
return;
|
||||
}
|
||||
|
||||
while (len > 0) {
|
||||
uint16_t blockid = index[0] | (index[256] << 8);
|
||||
uint8_t *block = NULL;
|
||||
if (blockid && (blockid + 1) * 512 <= disklen) {
|
||||
block = disk + blockid * 512;
|
||||
}
|
||||
uint32_t blen = len > 512 ? 512 : len;
|
||||
dumpSeedling(block, blen, f);
|
||||
len -= blen;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
static void dumpTree(uint8_t *index, uint32_t len, FILE *f, uint8_t *disk,
|
||||
uint32_t disklen) {
|
||||
if (index == NULL) {
|
||||
fseek(f, len, SEEK_CUR);
|
||||
return;
|
||||
}
|
||||
|
||||
while (len > 0) {
|
||||
uint16_t blockid = index[0] | (index[256] << 8);
|
||||
uint8_t *block = NULL;
|
||||
if (blockid && (blockid + 1) * 512 <= disklen) {
|
||||
block = disk + blockid * 512;
|
||||
}
|
||||
uint32_t blen = len > 256 * 512 ? 256 * 512 : len;
|
||||
dumpSapling(block, blen, f, disk, disklen);
|
||||
len -= blen;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
static void doGSOS(uint16_t key, char *name, uint8_t *disk,
|
||||
uint32_t disklen, int depth) {
|
||||
uint8_t *block = disk + key * 512;
|
||||
int type = *block;
|
||||
uint16_t subkey = r16(block + 1);
|
||||
uint32_t eof = r24(block + 5);
|
||||
if (depth < 0) {
|
||||
doFile(subkey, eof, name, disk, disklen, type);
|
||||
}
|
||||
|
||||
char resname[50];
|
||||
strncpy(resname, name, 50);
|
||||
strncat(resname, ".res", 50);
|
||||
block = disk + key * 512 + 0x100;
|
||||
type = *block;
|
||||
subkey = r16(block + 1);
|
||||
uint32_t reof = r24(block + 5);
|
||||
if (depth < 0) {
|
||||
doFile(subkey, reof, resname, disk, disklen, type);
|
||||
} else {
|
||||
indent(depth);
|
||||
printf("%s %d bytes resource: %d bytes\n", name, eof, reof);
|
||||
}
|
||||
}
|
||||
|
||||
static void doFile(uint16_t key, uint32_t len, char *name, uint8_t *disk,
|
||||
uint32_t disklen, int type) {
|
||||
uint8_t *block = disk + key * 512;
|
||||
FILE *f = fopen(name, "wb");
|
||||
if (!f) {
|
||||
fprintf(stderr, "Failed to create '%s'\n", name);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case 1:
|
||||
dumpSeedling(block, len, f);
|
||||
break;
|
||||
case 2:
|
||||
dumpSapling(block, len, f, disk, disklen);
|
||||
break;
|
||||
case 3:
|
||||
dumpTree(block, len, f, disk, disklen);
|
||||
break;
|
||||
}
|
||||
fclose(f);
|
||||
}
|
|
@ -0,0 +1,374 @@
|
|||
#pragma once
|
||||
|
||||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* Defines the 65816 opcodes, their addressing modes, and sizes
|
||||
*/
|
||||
|
||||
/**
|
||||
Addressing modes:
|
||||
imp implied
|
||||
imm #$const (l)
|
||||
immm #$const (l | h) if m16
|
||||
immx #$const (l | h) if x16
|
||||
imms #$const (l | h)
|
||||
abs $addr (addrl | addrh)
|
||||
abl $addr (addrl | addrh | bank)
|
||||
abx $addr,x (addrl | addrh)
|
||||
aby $addr,y (addrl | addrh)
|
||||
ablx $addr,x (addrl | addrh | bank)
|
||||
aix ($addr,x) (addrl | addrh)
|
||||
zp $zp (offset)
|
||||
zpx $zp,x (offset)
|
||||
zpy $zp,y (offset)
|
||||
zps $zp,s (offset)
|
||||
ind ($addr) (addrl | addrh)
|
||||
inz ($zp) (offset)
|
||||
inl [$zp] (offset)
|
||||
inx ($zp,x) (offset)
|
||||
iny ($zp),y (offset)
|
||||
inly [$zp],y (offset)
|
||||
ins ($zp,s),y (offset)
|
||||
rel $r (signed byte + pc)
|
||||
rell $r (offsetl | offseth) + pc
|
||||
bank $sb,$db (dstbnk | srcbnk)
|
||||
db $op
|
||||
dw $op
|
||||
dd $op
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
IMP = 0,
|
||||
IMM,
|
||||
IMMM,
|
||||
IMMX,
|
||||
IMMS,
|
||||
ABS,
|
||||
ABL,
|
||||
ABX,
|
||||
ABY,
|
||||
ABLX,
|
||||
AIX,
|
||||
ZP,
|
||||
ZPX,
|
||||
ZPY,
|
||||
ZPS,
|
||||
IND,
|
||||
INZ,
|
||||
INL,
|
||||
INX,
|
||||
INY,
|
||||
INLY,
|
||||
INS,
|
||||
REL,
|
||||
RELL,
|
||||
BANK,
|
||||
DB,
|
||||
DW,
|
||||
DD
|
||||
} Address;
|
||||
|
||||
typedef enum {
|
||||
BREAK = 0,
|
||||
NORMAL = 1,
|
||||
BRANCH = 2,
|
||||
CALL = 3,
|
||||
RETURN = 4,
|
||||
JUMP = 5
|
||||
} OpType;
|
||||
|
||||
typedef struct {
|
||||
const char *inst;
|
||||
Address address;
|
||||
OpType type;
|
||||
} Opcode;
|
||||
|
||||
static Opcode opcodes[] = {
|
||||
{"brk", IMP, BREAK}, // 00
|
||||
{"ora", INX, NORMAL}, // 01
|
||||
{"cop", IMP, NORMAL}, // 02
|
||||
{"ora", ZPS, NORMAL}, // 03
|
||||
{"tsb", ZP, NORMAL}, // 04
|
||||
{"ora", ZP, NORMAL}, // 05
|
||||
{"asl", ZP, NORMAL}, // 06
|
||||
{"ora", INL, NORMAL}, // 07
|
||||
{"php", IMP, NORMAL}, // 08
|
||||
{"ora", IMMM, NORMAL}, // 09
|
||||
{"asl", IMP, NORMAL}, // 0a
|
||||
{"phd", IMP, NORMAL}, // 0b
|
||||
{"tsb", ABS, NORMAL}, // 0c
|
||||
{"ora", ABS, NORMAL}, // 0d
|
||||
{"asl", ABS, NORMAL}, // 0e
|
||||
{"ora", ABL, NORMAL}, // 0f
|
||||
{"bpl", REL, BRANCH}, // 10
|
||||
{"ora", INY, NORMAL}, // 11
|
||||
{"ora", INZ, NORMAL}, // 12
|
||||
{"ora", INS, NORMAL}, // 13
|
||||
{"trb", ZP, NORMAL}, // 14
|
||||
{"ora", ZPX, NORMAL}, // 15
|
||||
{"asl", ZPX, NORMAL}, // 16
|
||||
{"ora", INLY, NORMAL}, // 17
|
||||
{"clc", IMP, NORMAL}, // 18
|
||||
{"ora", ABY, NORMAL}, // 19
|
||||
{"inc", IMP, NORMAL}, // 1a
|
||||
{"tcs", IMP, NORMAL}, // 1b
|
||||
{"trb", ABS, NORMAL}, // 1c
|
||||
{"ora", ABX, NORMAL}, // 1d
|
||||
{"asl", ABX, NORMAL}, // 1e
|
||||
{"ora", ABLX, NORMAL}, // 1f
|
||||
{"jsr", ABS, CALL}, // 20
|
||||
{"and", INX, NORMAL}, // 21
|
||||
{"jsl", ABL, CALL}, // 22
|
||||
{"and", ZPS, NORMAL}, // 23
|
||||
{"bit", ZP, NORMAL}, // 24
|
||||
{"and", ZP, NORMAL}, // 25
|
||||
{"rol", ZP, NORMAL}, // 26
|
||||
{"and", INL, NORMAL}, // 27
|
||||
{"plp", IMP, NORMAL}, // 28
|
||||
{"and", IMMM, NORMAL}, // 29
|
||||
{"rol", IMP, NORMAL}, // 2a
|
||||
{"pld", IMP, NORMAL}, // 2b
|
||||
{"bit", ABS, NORMAL}, // 2c
|
||||
{"and", ABS, NORMAL}, // 2d
|
||||
{"rol", ABS, NORMAL}, // 2e
|
||||
{"and", ABL, NORMAL}, // 2f
|
||||
{"bmi", REL, BRANCH}, // 30
|
||||
{"and", INY, NORMAL}, // 31
|
||||
{"and", INZ, NORMAL}, // 32
|
||||
{"and", INS, NORMAL}, // 33
|
||||
{"bit", ZPX, NORMAL}, // 34
|
||||
{"and", ZPX, NORMAL}, // 35
|
||||
{"rol", ZPX, NORMAL}, // 36
|
||||
{"and", INLY, NORMAL}, // 37
|
||||
{"sec", IMP, NORMAL}, // 38
|
||||
{"and", ABY, NORMAL}, // 39
|
||||
{"dec", IMP, NORMAL}, // 3a
|
||||
{"tsc", IMP, NORMAL}, // 3b
|
||||
{"bit", ABX, NORMAL}, // 3c
|
||||
{"and", ABX, NORMAL}, // 3d
|
||||
{"rol", ABX, NORMAL}, // 3e
|
||||
{"and", ABLX, NORMAL}, // 3f
|
||||
{"rti", IMP, RETURN}, // 40
|
||||
{"eor", INX, NORMAL}, // 41
|
||||
{"db", DB, BREAK}, // 42
|
||||
{"eor", ZPS, NORMAL}, // 43
|
||||
{"mvp", BANK, NORMAL}, // 44
|
||||
{"eor", ZP, NORMAL}, // 45
|
||||
{"lsr", ZP, NORMAL}, // 46
|
||||
{"eor", INL, NORMAL}, // 47
|
||||
{"pha", IMP, NORMAL}, // 48
|
||||
{"eor", IMMM, NORMAL}, // 49
|
||||
{"lsr", IMP, NORMAL}, // 4a
|
||||
{"phk", IMP, NORMAL}, // 4b
|
||||
{"jmp", ABS, JUMP}, // 4c
|
||||
{"eor", ABS, NORMAL}, // 4d
|
||||
{"lsr", ABS, NORMAL}, // 4e
|
||||
{"eor", ABL, NORMAL}, // 4f
|
||||
{"bvc", REL, BRANCH}, // 50
|
||||
{"eor", INY, NORMAL}, // 51
|
||||
{"eor", INZ, NORMAL}, // 52
|
||||
{"eor", INS, NORMAL}, // 53
|
||||
{"mvn", BANK, NORMAL}, // 54
|
||||
{"eor", ZPX, NORMAL}, // 55
|
||||
{"lsr", ZPX, NORMAL}, // 56
|
||||
{"eor", INLY, NORMAL}, // 57
|
||||
{"cli", IMP, NORMAL}, // 58
|
||||
{"eor", ABY, NORMAL}, // 59
|
||||
{"phy", IMP, NORMAL}, // 5a
|
||||
{"tcd", IMP, NORMAL}, // 5b
|
||||
{"jmp", ABL, JUMP}, // 5c
|
||||
{"eor", ABX, NORMAL}, // 5d
|
||||
{"lsr", ABX, NORMAL}, // 5e
|
||||
{"eor", ABLX, NORMAL}, // 5f
|
||||
{"rts", IMP, RETURN}, // 60
|
||||
{"adc", INX, NORMAL}, // 61
|
||||
{"per", IMP, NORMAL}, // 62
|
||||
{"adc", ZPS, NORMAL}, // 63
|
||||
{"stz", ZP, NORMAL}, // 64
|
||||
{"adc", ZP, NORMAL}, // 65
|
||||
{"ror", ZP, NORMAL}, // 66
|
||||
{"adc", INL, NORMAL}, // 67
|
||||
{"pla", IMP, NORMAL}, // 68
|
||||
{"adc", IMMM, NORMAL}, // 69
|
||||
{"ror", IMP, NORMAL}, // 6a
|
||||
{"rtl", IMP, RETURN}, // 6b
|
||||
{"jmp", IND, JUMP}, // 6c
|
||||
{"adc", ABS, NORMAL}, // 6d
|
||||
{"ror", ABS, NORMAL}, // 6e
|
||||
{"adc", ABL, NORMAL}, // 6f
|
||||
{"bvs", REL, BRANCH}, // 70
|
||||
{"adc", INY, NORMAL}, // 71
|
||||
{"adc", INZ, NORMAL}, // 72
|
||||
{"adc", INS, NORMAL}, // 73
|
||||
{"stz", ZPX, NORMAL}, // 74
|
||||
{"adc", ZPX, NORMAL}, // 75
|
||||
{"ror", ZPX, NORMAL}, // 76
|
||||
{"adc", INLY, NORMAL}, // 77
|
||||
{"sei", IMP, NORMAL}, // 78
|
||||
{"adc", ABY, NORMAL}, // 79
|
||||
{"ply", IMP, NORMAL}, // 7a
|
||||
{"tdc", IMP, NORMAL}, // 7b
|
||||
{"jmp", AIX, JUMP}, // 7c
|
||||
{"adc", ABX, NORMAL}, // 7d
|
||||
{"ror", ABX, NORMAL}, // 7e
|
||||
{"adc", ABLX, NORMAL}, // 7f
|
||||
{"bra", REL, JUMP}, // 80
|
||||
{"sta", INX, NORMAL}, // 81
|
||||
{"brl", RELL, JUMP}, // 82
|
||||
{"sta", ZPS, NORMAL}, // 83
|
||||
{"sty", ZP, NORMAL}, // 84
|
||||
{"sta", ZP, NORMAL}, // 85
|
||||
{"stx", ZP, NORMAL}, // 86
|
||||
{"sta", INL, NORMAL}, // 87
|
||||
{"dey", IMP, NORMAL}, // 88
|
||||
{"bit", IMMM, NORMAL}, // 89
|
||||
{"txa", IMP, NORMAL}, // 8a
|
||||
{"phb", IMP, NORMAL}, // 8b
|
||||
{"sty", ABS, NORMAL}, // 8c
|
||||
{"sta", ABS, NORMAL}, // 8d
|
||||
{"stx", ABS, NORMAL}, // 8e
|
||||
{"sta", ABL, NORMAL}, // 8f
|
||||
{"bcc", REL, BRANCH}, // 90
|
||||
{"sta", INY, NORMAL}, // 91
|
||||
{"sta", INZ, NORMAL}, // 92
|
||||
{"sta", INS, NORMAL}, // 93
|
||||
{"sty", ZPX, NORMAL}, // 94
|
||||
{"sta", ZPX, NORMAL}, // 95
|
||||
{"stx", ZPY, NORMAL}, // 96
|
||||
{"sta", INLY, NORMAL}, // 97
|
||||
{"tya", IMP, NORMAL}, // 98
|
||||
{"sta", ABY, NORMAL}, // 99
|
||||
{"txs", IMP, NORMAL}, // 9a
|
||||
{"txy", IMP, NORMAL}, // 9b
|
||||
{"stz", ABS, NORMAL}, // 9c
|
||||
{"sta", ABX, NORMAL}, // 9d
|
||||
{"stz", ABX, NORMAL}, // 9e
|
||||
{"sta", ABLX, NORMAL}, // 9f
|
||||
{"ldy", IMMX, NORMAL}, // a0
|
||||
{"lda", INX, NORMAL}, // a1
|
||||
{"ldx", IMMX, NORMAL}, // a2
|
||||
{"lda", ZPS, NORMAL}, // a3
|
||||
{"ldy", ZP, NORMAL}, // a4
|
||||
{"lda", ZP, NORMAL}, // a5
|
||||
{"ldx", ZP, NORMAL}, // a6
|
||||
{"lda", INL, NORMAL}, // a7
|
||||
{"tay", IMP, NORMAL}, // a8
|
||||
{"lda", IMMM, NORMAL}, // a9
|
||||
{"tax", IMP, NORMAL}, // aa
|
||||
{"plb", IMP, NORMAL}, // ab
|
||||
{"ldy", ABS, NORMAL}, // ac
|
||||
{"lda", ABS, NORMAL}, // ad
|
||||
{"ldx", ABS, NORMAL}, // ae
|
||||
{"lda", ABL, NORMAL}, // af
|
||||
{"bcs", REL, BRANCH}, // b0
|
||||
{"lda", INY, NORMAL}, // b1
|
||||
{"lda", INZ, NORMAL}, // b2
|
||||
{"lda", INS, NORMAL}, // b3
|
||||
{"ldy", ZPX, NORMAL}, // b4
|
||||
{"lda", ZPX, NORMAL}, // b5
|
||||
{"ldx", ZPY, NORMAL}, // b6
|
||||
{"lda", INLY, NORMAL}, // b7
|
||||
{"clv", IMP, NORMAL}, // b8
|
||||
{"lda", ABY, NORMAL}, // b9
|
||||
{"tsx", IMP, NORMAL}, // ba
|
||||
{"tyx", IMP, NORMAL}, // bb
|
||||
{"ldy", ABX, NORMAL}, // bc
|
||||
{"lda", ABX, NORMAL}, // bd
|
||||
{"ldx", ABY, NORMAL}, // be
|
||||
{"lda", ABLX, NORMAL}, // bf
|
||||
{"cpy", IMMX, NORMAL}, // c0
|
||||
{"cmp", INX, NORMAL}, // c1
|
||||
{"rep", IMM, NORMAL}, // c2
|
||||
{"cmp", ZPS, NORMAL}, // c3
|
||||
{"cpy", ZP, NORMAL}, // c4
|
||||
{"cmp", ZP, NORMAL}, // c5
|
||||
{"dec", ZP, NORMAL}, // c6
|
||||
{"cmp", INL, NORMAL}, // c7
|
||||
{"iny", IMP, NORMAL}, // c8
|
||||
{"cmp", IMMM, NORMAL}, // c9
|
||||
{"dex", IMP, NORMAL}, // ca
|
||||
{"wai", IMP, NORMAL}, // cb
|
||||
{"cpy", ABS, NORMAL}, // cc
|
||||
{"cmp", ABS, NORMAL}, // cd
|
||||
{"dec", ABS, NORMAL}, // ce
|
||||
{"cmp", ABL, NORMAL}, // cf
|
||||
{"bne", REL, BRANCH}, // d0
|
||||
{"cmp", INY, NORMAL}, // d1
|
||||
{"cmp", INZ, NORMAL}, // d2
|
||||
{"cmp", INS, NORMAL}, // d3
|
||||
{"pei", ZP, NORMAL}, // d4
|
||||
{"cmp", ZPX, NORMAL}, // d5
|
||||
{"dec", ZPX, NORMAL}, // d6
|
||||
{"cmp", INLY, NORMAL}, // d7
|
||||
{"cld", IMP, NORMAL}, // d8
|
||||
{"cmp", ABY, NORMAL}, // d9
|
||||
{"phx", IMP, NORMAL}, // da
|
||||
{"stp", IMP, BREAK}, // db
|
||||
{"jmp", IND, JUMP}, // dc
|
||||
{"cmp", ABX, NORMAL}, // dd
|
||||
{"dec", ABX, NORMAL}, // de
|
||||
{"cmp", ABLX, NORMAL}, // df
|
||||
{"cpx", IMMX, NORMAL}, // e0
|
||||
{"sbc", INX, NORMAL}, // e1
|
||||
{"sep", IMM, NORMAL}, // e2
|
||||
{"sbc", ZPS, NORMAL}, // e3
|
||||
{"cpx", ZP, NORMAL}, // e4
|
||||
{"sbc", ZP, NORMAL}, // e5
|
||||
{"inc", ZP, NORMAL}, // e6
|
||||
{"sbc", INL, NORMAL}, // e7
|
||||
{"inx", IMP, NORMAL}, // e8
|
||||
{"sbc", IMMM, NORMAL}, // e9
|
||||
{"nop", IMP, NORMAL}, // ea
|
||||
{"xba", IMP, NORMAL}, // eb
|
||||
{"cpx", ABS, NORMAL}, // ec
|
||||
{"sbc", ABS, NORMAL}, // ed
|
||||
{"inc", ABS, NORMAL}, // ee
|
||||
{"sbc", ABL, NORMAL}, // ef
|
||||
{"beq", REL, BRANCH}, // f0
|
||||
{"sbc", INY, NORMAL}, // f1
|
||||
{"sbc", INZ, NORMAL}, // f2
|
||||
{"sbc", INS, NORMAL}, // f3
|
||||
{"pea", IMMS, NORMAL}, // f4
|
||||
{"sbc", ZPX, NORMAL}, // f5
|
||||
{"inc", ZPX, NORMAL}, // f6
|
||||
{"sbc", INLY, NORMAL}, // f7
|
||||
{"sed", IMP, NORMAL}, // f8
|
||||
{"sbc", ABY, NORMAL}, // f9
|
||||
{"plx", IMP, NORMAL}, // fa
|
||||
{"xce", IMP, NORMAL}, // fb
|
||||
{"jsr", AIX, CALL}, // fc
|
||||
{"sbc", ABX, NORMAL}, // fd
|
||||
{"inc", ABX, NORMAL}, // fe
|
||||
{"sbc", ABLX, NORMAL} // ff
|
||||
};
|
||||
|
||||
static uint8_t addressSizes[] = {
|
||||
1, // IMP
|
||||
2, // IMM
|
||||
3, // IMMM
|
||||
3, // IMMX
|
||||
3, // IMMS
|
||||
3, // ABS
|
||||
4, // ABL
|
||||
3, // ABX
|
||||
3, // ABY
|
||||
4, // ABLX
|
||||
3, // AIX
|
||||
2, // ZP
|
||||
2, // ZPX
|
||||
2, // ZPY
|
||||
2, // ZPS
|
||||
3, // IND
|
||||
2, // INZ
|
||||
2, // INL
|
||||
2, // INX
|
||||
2, // INY
|
||||
2, // INLY
|
||||
2, // INS
|
||||
2, // REL
|
||||
3, // RELL
|
||||
3, // BANK
|
||||
1, // DB
|
||||
2, // DW
|
||||
4 // DD
|
||||
};
|
|
@ -0,0 +1,24 @@
|
|||
Copyright (c) 2018, Sean Kasun
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,19 @@
|
|||
CC=clang
|
||||
CFLAGS=-Wall
|
||||
|
||||
all: 2mg omf regs
|
||||
|
||||
2mg: 2mg.o
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
|
||||
omf: omf.o parser.o
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
|
||||
regs: regs.o map.o scan.o parser.o disasm.o
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
|
||||
%.o: %.c
|
||||
$(CC) -c $(CFLAGS) -o $@ $<
|
||||
|
||||
clean:
|
||||
rm -f *.o 2mg omg regs
|
|
@ -0,0 +1,175 @@
|
|||
# What is this?
|
||||
|
||||
This is a set of command-line tools designed specifically to reverse engineer Apple IIgs software. It is comprised of 3 separate tools; `2mg`, `omf`, and `regs`.
|
||||
|
||||
|
||||
|
||||
## 2mg
|
||||
|
||||
`2mg` extracts .2mg and .po prodos disk images. You can also just list the contents of the disk image with the `-l` or `--list` command line argument. Otherwise, it will create a folder with the name of the disk and extract all the files into that folder.
|
||||
|
||||
|
||||
|
||||
## omf
|
||||
|
||||
`omf` is a rather complicated tool which is designed to extract relocatable segments from OMF files. Apple IIgs executables (.sys16 files) and system tools (ex. SYSTEM/TOOLS/TOOL025) are in OMF format.
|
||||
|
||||
You first run this tool and pass it an OMF file and it will generate a .map file. This map file is a simple text file that you may edit. Each line is in the format:
|
||||
|
||||
`segment:memory location`
|
||||
|
||||
The `segment`is the segment number from the OMF file, and `memory location` is where in memory to relocate that segment.
|
||||
|
||||
`omf` does its best to automatically pack all the relocatable segments into the smallest memory possible, starting at `$2/0000`. You can change the starting memory address with the `-o` or `--org` argument. If you wish to manually specify where each segment should go in memory, feel free to edit the .map file however you wish.
|
||||
|
||||
The next step is to run `omf` again, this time specifying the map file with `-m` or `--map`. This will apply the .map to the OMF and output each segment along with a corresponding .map file. `omf` will throw an error if the segments cannot be mapped as the .map file dictates (for example, you modified the map file so that the segments accidentally overlap).
|
||||
|
||||
`omf` will modify each segment, applying the proper relocations before outputting the segment. If you wish to change where a segment is in memory, you should modify the original .map file and re-run `omf`. The resulting output files will be hardcoded for those specific memory locations.
|
||||
|
||||
The segment outputs will be named `segX` and `segX.map`, where `X` is the segment number, in hex. If you wish to change the prefix from `seg` use the `-p` or `--prefix` argument.
|
||||
|
||||
At this point, you can use the resulting segment files and map files as input to the `regs` tool.
|
||||
|
||||
|
||||
|
||||
## regs
|
||||
|
||||
`regs`is my 65816 tracing disassembler. It can be used in conjunction with the .map files created by `omf` or on its own. Since it is a tracing disassembler, it will start disassembly at a given location, and keep disassembling, following all possible paths. Everything not disassembled will be assumed to be data and shown in a hex view.
|
||||
|
||||
|
||||
|
||||
#### regs by itself
|
||||
|
||||
You can call `regs` and simply pass it a binary file and it will attempt to disassemble it. You can specify where in memory it should load the file before disassembly with the `-o` or `--org` argument. You can also control whether or not the disassembler is in emulation mode or 16-bit mode with various command-line arguments. Emulation mode is also useful for disassembling 8-bit Apple II software. Use `-e` to start in emulation mode (default native mode), `-m` to start with an 8-bit accumulator (default 16-bit), and `-x` to start with 8-bit index registers (default 16-bit).
|
||||
|
||||
|
||||
|
||||
#### regs with .map files
|
||||
|
||||
`regs` with .map files is where the disassembler really shines. You can call `regs` and pass it a .map file generated by `omf` and have real control over the disassembly. The .map file is designed to be edited by hand. The format is as follows:
|
||||
|
||||
```
|
||||
gMAP "seg1"
|
||||
sORG $30000
|
||||
$30000:
|
||||
$30053:mx
|
||||
$31066:e
|
||||
```
|
||||
|
||||
The first line specifies the segment file that this map applies to. The filename in the quotes should be relative to the current directory.
|
||||
|
||||
The next line specifies where the segment belongs in memory. **Do not edit this** if the segment was created by `omf`, since it has also been hardcoded in the binary.
|
||||
|
||||
The next lines are a list of entry points to begin disassembly at. If, when analyzing the disassembly you find a switch case encoded as an indirect jump, you can take that list of jumps and add them to the map file and re-run `regs` to disassemble the previously un-disassembled data. As you work through a disassembly, you may end up with a map file with hundreds of entry points, that's normal.
|
||||
|
||||
The flags after the colon are optional, and specify whether emulation mode should be enabled, or 16-bit or 8-bit accumulator and index registers should be used. It defaults to native mode with 16-bit registers.
|
||||
|
||||
You can also use bank-separators if you wish. `$3/1066` is the same as `$31066`.
|
||||
|
||||
|
||||
|
||||
## Pascal folder
|
||||
|
||||
You'll notice a pascal folder in this repository. These are the original GS/OS pascal header files. This is to make it easier for you to look up the arguments and structures of various tool calls you'll come across when disassembling.
|
||||
|
||||
|
||||
|
||||
# Examples
|
||||
|
||||
The flexibility of these tools makes their use a little complicated. So here are some examples of how to go about disassembling various things.
|
||||
|
||||
### Disassembling an S16
|
||||
|
||||
I'll be using the S16 from Dream Zone as an example.
|
||||
|
||||
Generate a basic map of your S16:
|
||||
|
||||
`$ omf dream.s16`
|
||||
|
||||
This will create a file called `dream.s16.map`, which we could edit if we choose. We'll leave it as it is. Extract the segments of the OMF with:
|
||||
|
||||
`$ omf --map=dream.s16.map dream.s16 --prefix=dream`
|
||||
|
||||
This will create files `dream1`to `dream5` as well as `dream1.map` to `dream5.map`.
|
||||
|
||||
The program's entry point is always the beginning of the first segment, so we'll start there.
|
||||
|
||||
`$ regs dream1.map > dream1.s`
|
||||
|
||||
This will disassemble the entry point. We can then modify the map to further refine the disassembly if we wish.
|
||||
|
||||
|
||||
|
||||
### Disassembling a Tool
|
||||
|
||||
This works the same as disassembling an S16, but with an important difference.
|
||||
|
||||
We'll start the same, generating a map and extracting it.
|
||||
|
||||
```
|
||||
$ omf TOOL025
|
||||
$ omf --map=TOOL025.map TOOL025
|
||||
```
|
||||
|
||||
Now, we'll remove all disassembly instructions from the map. You'll see why in a second. So we edit the map file to look like the following:
|
||||
|
||||
```
|
||||
gMAP "seg1"
|
||||
sORG $20000
|
||||
```
|
||||
|
||||
That's it.. no disassembly instructions. Now we run the disassembler:
|
||||
|
||||
`$ regs seg1.map > seg1.s`
|
||||
|
||||
This will just give us a hex dump of the segment. That's actually what we want. All tools start with a tool table. The first dword specifies the number of tools in this toolset. The next dwords all contain addresses (minus 1) of the various tool entry points.
|
||||
|
||||
Let's say I want to disassemble NoteOn. We check the pascal folder and discover that it's tool $0b inside the $19 toolset. Which is the TOOL025 file we're working on (the tool numbers in the filenames are in decimal). So we calculate the offset to that entry point.
|
||||
|
||||
`$0b * 4 + $20000 = $2:002c`
|
||||
|
||||
If we look at the hex dump at that location we'll discover the entry point of NoteOn: `$2:02dd`. Well that's minus one, so we add the real entry point to the .map file:
|
||||
|
||||
```
|
||||
gMAP "seg1"
|
||||
sORG $20000
|
||||
$2/02de:
|
||||
```
|
||||
|
||||
And rerun the disassembler.
|
||||
|
||||
`$ regs seg1.map > seg1.s`
|
||||
|
||||
We have just disassembled the NoteOn function.
|
||||
|
||||
|
||||
|
||||
### Disassembling a Specific Tool Call in ROM
|
||||
|
||||
Let's say I want to disassemble WriteRamBlock. We discover it's in the sound toolset $08. If you search, you'll discover that there isn't a TOOL008 anywhere, so we'll have to pull it from ROM. I'll be using an older 128k ROM just because it's convenient.
|
||||
|
||||
First thing I do, is actually hand make a `rom.map` file for the ROM.
|
||||
|
||||
```
|
||||
gMAP "APPLE2GS.ROM"
|
||||
sORG $fe0000
|
||||
$fe/0000:
|
||||
```
|
||||
|
||||
and disassemble it.
|
||||
|
||||
`$ regs rom.map > rom.s`
|
||||
|
||||
This is actually the bootstrap that initializes the `$e1/0000` tool call entrypoint. I notice it copies over a block of memory from `$fe/0051` into `$e1/0000`. So we add `$fe/0051` to the disassembly list of the map file, and disassemble it again.
|
||||
|
||||
Following along with the disassembly, we discover that there's a toolset list starting at `$fe/012f`. It starts with a dword with the number of toolsets in the ROM, followed by a list of offsets to the various toolsets. We want toolset 8 for the sound toolset.
|
||||
|
||||
`$8 * 4 + $fe012f = $fe014f`
|
||||
|
||||
Look up the dword in that location and I find that the toolset is located at `$ff/3e00`. If you then jump to that location, you'll find this is in the exact same format as a tool on disk. It starts with a tool table. WriteRamBlock is tool 9.
|
||||
|
||||
`$9 * 4 + $ff3e00 = $ff3e24`
|
||||
|
||||
At that location, we discover the offset to the tool entry point is `$ff/41a4` so we'll add `$ff/41a5`to the map file and rerun the disassembly.
|
||||
|
||||
Boom, we have just disassembled a specific tool call from ram.
|
|
@ -0,0 +1,412 @@
|
|||
#pragma once
|
||||
|
||||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* Defines important IIgs memory addresses.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
uint32_t address;
|
||||
const char *comment;
|
||||
} MemAddress;
|
||||
|
||||
static MemAddress addresses[] = {
|
||||
{0x03d0, "Enter BASIC"},
|
||||
{0x03d2, "Reconnect DOS"},
|
||||
{0x03d9, "Cow Sound"},
|
||||
{0x03ea, "Reconnect IO"},
|
||||
{0x03f2, "Control-Reset Vector"},
|
||||
{0x03f5, "Ampersand Vector"},
|
||||
{0x03f8, "Control-Y Vector"},
|
||||
{0x0400, "Text Screen"},
|
||||
{0x0800, "Text Screen 2"},
|
||||
{0x0803, "Enter assembler"},
|
||||
{0x2000, "Hires screen"},
|
||||
{0x4000, "Hires screen 2"},
|
||||
{0x9dbf, "Reconnect DOS 3.3"},
|
||||
{0xa56e, "CATALOG"},
|
||||
{0xc000, "KBD / 80STOREOFF"},
|
||||
{0xc001, "80STOREON"},
|
||||
{0xc002, "RDMAINRAM"},
|
||||
{0xc003, "RDCARDRAM"},
|
||||
{0xc004, "WRMAINRAM"},
|
||||
{0xc005, "WRCARDRAM"},
|
||||
{0xc006, "SETSLOTCXROM"},
|
||||
{0xc007, "SETINTCXROM"},
|
||||
{0xc008, "SETSTDZP"},
|
||||
{0xc009, "SETALTZP"},
|
||||
{0xc00a, "SETINTC3ROM"},
|
||||
{0xc00b, "SETSLOTC3ROM"},
|
||||
{0xc00c, "CLR80VID"},
|
||||
{0xc00d, "SET80VID"},
|
||||
{0xc00e, "CLRALTCHAR"},
|
||||
{0xc00f, "SETALTCHAR"},
|
||||
{0xc010, "KBDSTRB"},
|
||||
{0xc011, "RDLCBNK2"},
|
||||
{0xc012, "RDLCRAM"},
|
||||
{0xc013, "RDRAMRD"},
|
||||
{0xc014, "RDRAMWRT"},
|
||||
{0xc015, "RDCXROM"},
|
||||
{0xc016, "RDALTZP"},
|
||||
{0xc017, "RDC3ROM"},
|
||||
{0xc018, "RD80STORE"},
|
||||
{0xc019, "RDVBL"},
|
||||
{0xc01a, "RDTEXT"},
|
||||
{0xc01b, "RDMIXED"},
|
||||
{0xc01c, "RDPAGE2"},
|
||||
{0xc01d, "RDHIRES"},
|
||||
{0xc01e, "RDALTCHAR"},
|
||||
{0xc01f, "RD80VID"},
|
||||
{0xc020, "TAPEOUT"},
|
||||
{0xc021, "MONOCOLOR"},
|
||||
{0xc022, "TBCOLOR"},
|
||||
{0xc023, "VGCINT"},
|
||||
{0xc024, "MOUSEDATA"},
|
||||
{0xc025, "KEYMODREG"},
|
||||
{0xc026, "DATAREG"},
|
||||
{0xc027, "KMSTATUS"},
|
||||
{0xc028, "ROMBANK"},
|
||||
{0xc029, "NEWVIDEO"},
|
||||
{0xc02b, "LANGSEL"},
|
||||
{0xc02c, "CHARROM"},
|
||||
{0xc02d, "SLTROMSEL"},
|
||||
{0xc02e, "VERTCNT"},
|
||||
{0xc02f, "HORIZCNT"},
|
||||
{0xc030, "SPKR"},
|
||||
{0xc031, "DISKREG"},
|
||||
{0xc032, "SCANINT"},
|
||||
{0xc033, "CLOCKDATA"},
|
||||
{0xc034, "CLOCKCTL"},
|
||||
{0xc035, "SHADOW"},
|
||||
{0xc036, "CYAREG"},
|
||||
{0xc037, "DMAREG"},
|
||||
{0xc038, "SCCBREG"},
|
||||
{0xc039, "SCCAREG"},
|
||||
{0xc03a, "SCCBDATA"},
|
||||
{0xc03b, "SCCADATA"},
|
||||
{0xc03c, "SOUNDCTL"},
|
||||
{0xc03d, "SOUNDDATA"},
|
||||
{0xc03e, "SOUNDADRL"},
|
||||
{0xc03f, "SOUNDADRH"},
|
||||
{0xc040, "STROBE"},
|
||||
{0xc041, "INTEN"},
|
||||
{0xc044, "MMDELTAX"},
|
||||
{0xc045, "MMDELTAY"},
|
||||
{0xc046, "DIAGTYPE"},
|
||||
{0xc047, "CLRVBLINT"},
|
||||
{0xc048, "CLRXYINT"},
|
||||
{0xc050, "TXTCLR"},
|
||||
{0xc051, "TXTSET"},
|
||||
{0xc052, "MIXCLR"},
|
||||
{0xc053, "MIXSET"},
|
||||
{0xc054, "TXTPAGE1"},
|
||||
{0xc055, "TXTPAGE2"},
|
||||
{0xc056, "LORES"},
|
||||
{0xc057, "HIRES"},
|
||||
{0xc058, "CLRAN0"},
|
||||
{0xc059, "SETAN0"},
|
||||
{0xc05a, "CLRAN1"},
|
||||
{0xc05b, "SETAN1"},
|
||||
{0xc05c, "CLRAN2"},
|
||||
{0xc05d, "SETAN2"},
|
||||
{0xc05e, "DHIRESON"},
|
||||
{0xc05f, "DHIRESOFF"},
|
||||
{0xc060, "TAPEIN"},
|
||||
{0xc061, "RDBTN0"},
|
||||
{0xc062, "RDBTN1"},
|
||||
{0xc063, "RDBTN2"},
|
||||
{0xc064, "PADDL0"},
|
||||
{0xc065, "PADDL1"},
|
||||
{0xc066, "PADDL2"},
|
||||
{0xc067, "PADDL3"},
|
||||
{0xc068, "STATEREG"},
|
||||
{0xc06d, "TESTREG"},
|
||||
{0xc06e, "CLTRM"},
|
||||
{0xc06f, "ENTM"},
|
||||
{0xc070, "PTRIG"},
|
||||
{0xc073, "BANKSEL"},
|
||||
{0xc07e, "IOUDISON"},
|
||||
{0xc07f, "IOUDISOFF"},
|
||||
{0xc081, "ROMIN"},
|
||||
{0xc083, "LCBANK2"},
|
||||
{0xc08b, "LCBANK1"},
|
||||
{0xc0e0, "PH0 off"},
|
||||
{0xc0e1, "PH0 on"},
|
||||
{0xc0e2, "PH1 off"},
|
||||
{0xc0e3, "PH1 on"},
|
||||
{0xc0e4, "PH2 off"},
|
||||
{0xc0e5, "PH2 on"},
|
||||
{0xc0e6, "PH3 off"},
|
||||
{0xc0e7, "PH3 on"},
|
||||
{0xc0e8, "motor off"},
|
||||
{0xc0e9, "motor on"},
|
||||
{0xc0ea, "drive 1"},
|
||||
{0xc0eb, "drive 2"},
|
||||
{0xc0ec, "q6 off"},
|
||||
{0xc0ed, "q6 on"},
|
||||
{0xc0ee, "q7 off"},
|
||||
{0xc0ef, "q7 on"},
|
||||
{0xc311, "AUXMOVE"},
|
||||
{0xc314, "XFER"},
|
||||
{0xc50d, "Smartport"},
|
||||
{0xc70d, "Smartport"},
|
||||
{0xcfff," CLRROM"},
|
||||
{0xd1fc, "Hires Find"},
|
||||
{0xd2c9, "Hires bg"},
|
||||
{0xd331, "Hires graphics bg"},
|
||||
{0xd33a, "Hires DRAW1"},
|
||||
{0xd3b9, "Hires SHLOAD"},
|
||||
{0xd683, "Clear FOR"},
|
||||
{0xdafb, "Carriage Return"},
|
||||
{0xe000, "Reset Int Basic"},
|
||||
{0xe04b, "IntBASIC LIST"},
|
||||
{0xe5ad, "NEW"},
|
||||
{0xe5b7, "PLOT"},
|
||||
{0xe836, "IntBASIC CHAIN"},
|
||||
{0xefec, "IntBASIC RUN"},
|
||||
{0xf07c, "IntBASIC LOAD"},
|
||||
{0xf0e0, "Leave monitor"},
|
||||
{0xf123, "DRAW shape"},
|
||||
{0xf14f, "Plot point"},
|
||||
{0xf171, "IntBASIC TRACE ON"},
|
||||
{0xf176, "IntBASIC TRACE OFF"},
|
||||
{0xf30a, "IntBASIC CON"},
|
||||
{0xf317, "RESUME"},
|
||||
{0xf328, "Clear error"},
|
||||
{0xf3de, "HGR"},
|
||||
{0xf3e4, "Show hires"},
|
||||
{0xf3f2, "Clear hires"},
|
||||
{0xf3f6, "Clear hires color"},
|
||||
{0xf666, "Enter assembler"},
|
||||
{0xf800, "PLOT"},
|
||||
{0xf80e, "PLOT1"},
|
||||
{0xf819, "HLINE"},
|
||||
{0xf828, "VLINE"},
|
||||
{0xf832, "CLRSCR"},
|
||||
{0xf836, "CLRTOP"},
|
||||
{0xf838, "Clear lores y"},
|
||||
{0xf83c, "Clear rect"},
|
||||
{0xf847, "GBASCALC"},
|
||||
{0xf85e, "Add 3 COLOR"},
|
||||
{0xf85f, "NXTCOL"},
|
||||
{0xf864, "SETCOL"},
|
||||
{0xf871, "SCRN"},
|
||||
{0xf88c, "INSDS1.2"},
|
||||
{0xf88e, "INSDS2"},
|
||||
{0xf890, "GET816LEN"},
|
||||
{0xf8d0, "INSTDSP"},
|
||||
{0xf940, "PRNTYX"},
|
||||
{0xf941, "PRNTAX"},
|
||||
{0xf944, "PRNTX"},
|
||||
{0xf948, "PRBLNK"},
|
||||
{0xf94a, "PRBL2"},
|
||||
{0xf94c, "Print X blank"},
|
||||
{0xf953, "PCADJ"},
|
||||
{0xf962, "TEXT2COPY"},
|
||||
{0xfa40, "OLDIRQ"},
|
||||
{0xfa4c, "BREAK"},
|
||||
{0xfa59, "OLDBRK"},
|
||||
{0xfa62, "RESET"},
|
||||
{0xfaa6, "PWRUP"},
|
||||
{0xfaba, "SLOOP"},
|
||||
{0xfad7, "REGDSP"},
|
||||
{0xfb19, "RTBL"},
|
||||
{0xfb1e, "PREAD"},
|
||||
{0xfb21, "PREAD4"},
|
||||
{0xfb2f, "INIT"},
|
||||
{0xfb39, "SETTXT"},
|
||||
{0xfb40, "SETGR"},
|
||||
{0xfb4b, "SETWND"},
|
||||
{0xfb51, "SETWND2"},
|
||||
{0xfb5b, "TABV"},
|
||||
{0xfb60, "APPLEII"},
|
||||
{0xfb6f, "SETPWRC"},
|
||||
{0xfb78, "VIDWAIT"},
|
||||
{0xfb88, "KBDWAIT"},
|
||||
{0xfbb3, "VERSION"},
|
||||
{0xfbbf, "ZIDBYTE2"},
|
||||
{0xfbc0, "ZIDBYTE"},
|
||||
{0xfbc1, "BASCALC"},
|
||||
{0xfbdd, "BELL1"},
|
||||
{0xfbe2, "BELL1.2"},
|
||||
{0xfbe4, "BELL2"},
|
||||
{0xfbf0, "STORADV"},
|
||||
{0xfbf4, "ADVANCE"},
|
||||
{0xfbfd, "VIDOUT"},
|
||||
{0xfc10, "BS"},
|
||||
{0xfc1a, "UP"},
|
||||
{0xfc22, "VTAB"},
|
||||
{0xfc24, "VTABZ"},
|
||||
{0xfc2c, "ESC"},
|
||||
{0xfc42, "CLREOP"},
|
||||
{0xfc58, "HOME"},
|
||||
{0xfc62, "CR"},
|
||||
{0xfc66, "LF"},
|
||||
{0xfc70, "SCROLL"},
|
||||
{0xfc9c, "CLREOL"},
|
||||
{0xfc9e, "CLREOLZ"},
|
||||
{0xfca8, "WAIT"},
|
||||
{0xfcb4, "NXTA4"},
|
||||
{0xfcba, "NXTA1"},
|
||||
{0xfcc9, "HEADR"},
|
||||
{0xfd0c, "RDKEY"},
|
||||
{0xfd10, "FD10"},
|
||||
{0xfd18, "RDKEY1"},
|
||||
{0xfd1b, "KEYIN"},
|
||||
{0xfd35, "RDCHAR"},
|
||||
{0xfd5a, "Wait return"},
|
||||
{0xfd5c, "Ring bell wait"},
|
||||
{0xfd67, "GETLNZ"},
|
||||
{0xfd6a, "GETLN"},
|
||||
{0xfd6c, "GETLN0"},
|
||||
{0xfd6f, "GETLN1"},
|
||||
{0xfd75, "Wait line"},
|
||||
{0xfd8b, "CROUT1"},
|
||||
{0xfd8e, "CROUT"},
|
||||
{0xfd92, "PRA1"},
|
||||
{0xfda3, "Print memory"},
|
||||
{0xfdda, "PRBYTE"},
|
||||
{0xfde3, "PRHEX"},
|
||||
{0xfded, "COUT"},
|
||||
{0xfdf0, "COUT1"},
|
||||
{0xfdf6, "COUTZ"},
|
||||
{0xfe1f, "IDROUTINE"},
|
||||
{0xfe2c, "MOVE"},
|
||||
{0xfe5e, "LIST"},
|
||||
{0xfe61, "Disassembler"},
|
||||
{0xfe80, "INVERSE"},
|
||||
{0xfe84, "NORMAL"},
|
||||
{0xfe86, "Set I"},
|
||||
{0xfe89, "SETKBD"},
|
||||
{0xfe8b, "INPORT"},
|
||||
{0xfe93, "SETVID"},
|
||||
{0xfe95, "OUTPORT"},
|
||||
{0xfeb0, "Jump BASIC"},
|
||||
{0xfeb6, "GO"},
|
||||
{0xfebf, "Display regs"},
|
||||
{0xfec2, "Perform trace"},
|
||||
{0xfecd, "WRITE"},
|
||||
{0xfefd, "READ"},
|
||||
{0xff2d, "PRERR"},
|
||||
{0xff3a, "BELL"},
|
||||
{0xff3f, "RESTORE"},
|
||||
{0xff44, "RSTR1"},
|
||||
{0xff4a, "SAVE"},
|
||||
{0xff4c, "SAV1"},
|
||||
{0xff58, "IORTS"},
|
||||
{0xff59, "OLDRST"},
|
||||
{0xff65, "MON"},
|
||||
{0xff69, "MONZ"},
|
||||
{0xff6c, "MONZ2"},
|
||||
{0xff70, "MONZ4"},
|
||||
{0xff8a, "DIG"},
|
||||
{0xffa7, "GETNUM"},
|
||||
{0xffad, "NXTCHR"},
|
||||
{0xffbe, "TOSUB"},
|
||||
{0xffc7, "ZMODE"},
|
||||
{0xe01e04, "StdText"},
|
||||
{0xe01e08, "StdLine"},
|
||||
{0xe01e0c, "StdRect"},
|
||||
{0xe01e10, "StdRRect"},
|
||||
{0xe01e14, "StdOval"},
|
||||
{0xe01e18, "StdArc"},
|
||||
{0xe01e1c, "StdPoly"},
|
||||
{0xe01e20, "StdRgn"},
|
||||
{0xe01e24, "StdPixels"},
|
||||
{0xe01e28, "StdComment"},
|
||||
{0xe01e2c, "StdTxMeas"},
|
||||
{0xe01e30, "StdTxBnds"},
|
||||
{0xe01e34, "StdGetPic"},
|
||||
{0xe01e38, "StdPutPic"},
|
||||
{0xe01e98, "ShieldCursor"},
|
||||
{0xe01e9c, "UnshieldCursor"},
|
||||
{0xe10000, "System Tool dispatch"},
|
||||
{0xe10004, "System Tool dispatch"},
|
||||
{0xe10008, "User Tool dispatch"},
|
||||
{0xe1000c, "User Tool dispatch"},
|
||||
{0xe10010, "Interrupt manager"},
|
||||
{0xe10014, "COP manager"},
|
||||
{0xe10018, "Abort manager"},
|
||||
{0xe1001c, "System death manager"},
|
||||
{0xe10020, "AppleTalk interrupt"},
|
||||
{0xe10024, "Serial interrupt"},
|
||||
{0xe10028, "Scanline interrupt"},
|
||||
{0xe1002c, "Sound interrupt"},
|
||||
{0xe10030, "VBlank interrupt"},
|
||||
{0xe10034, "Mouse interrupt"},
|
||||
{0xe10038, "250ms interrupt"},
|
||||
{0xe1003c, "Keyboard interrupt"},
|
||||
{0xe10040, "ADB Response"},
|
||||
{0xe10044, "ADB SRQ"},
|
||||
{0xe10048, "DA manager"},
|
||||
{0xe1004c, "Flush Buffer"},
|
||||
{0xe10050, "KbdMicro interrupt"},
|
||||
{0xe10054, "1s interrupt"},
|
||||
{0xe10058, "External VGC interrupt"},
|
||||
{0xe1005c, "Ohter interrupt"},
|
||||
{0xe10060, "Cursor update"},
|
||||
{0xe10064, "IncBusy"},
|
||||
{0xe10068, "DecBusy"},
|
||||
{0xe1006c, "Bell vector"},
|
||||
{0xe10070, "Break vector"},
|
||||
{0xe10074, "Trace vector"},
|
||||
{0xe10078, "Step vector"},
|
||||
{0xe1007c, "ROM disk"},
|
||||
{0xe10080, "ToWriteBram"},
|
||||
{0xe10084, "ToReadBram"},
|
||||
{0xe10088, "ToWriteTime"},
|
||||
{0xe1008c, "ToReadTime"},
|
||||
{0xe10090, "ToCtrlPanel"},
|
||||
{0xe10094, "ToBramSetup"},
|
||||
{0xe10098, "ToPrintMsg8"},
|
||||
{0xe1009c, "ToPrintMsg16"},
|
||||
{0xe100a0, "Native Ctl-Y"},
|
||||
{0xe100a4, "ToAltDispCDA"},
|
||||
{0xe100a8, "Prodos 16"},
|
||||
{0xe100ac, "OS vector"},
|
||||
{0xe100b0, "GS/OS"},
|
||||
{0xe100b4, "P8 Switch"},
|
||||
{0xe100b8, "Public Flags"},
|
||||
{0xe100bc, "OS Kind"},
|
||||
{0xe100bd, "OS Boot"},
|
||||
{0xe100be, "OS Busy"},
|
||||
{0xe100c0, "MsgPtr"},
|
||||
{0xe10180, "ToBusyStrip"},
|
||||
{0xe10184, "ToStrip"},
|
||||
{0xe101b2, "MidiInputPoll"},
|
||||
{0xe10200, "Memory manager"},
|
||||
{0xe10204, "Set System Speed"},
|
||||
{0xe10208, "Slot Arbiter"},
|
||||
{0xe10220, "Hypercard callback"},
|
||||
{0xe10224, "WordForRTL"},
|
||||
{0xe11004, "ATLK Basic"},
|
||||
{0xe11008, "ATLK Pascal"},
|
||||
{0xe1100c, "ATLK RamGoComp"},
|
||||
{0xe11010, "ATLK SoftReset"},
|
||||
{0xe11014, "ATLK RamDispatch"},
|
||||
{0xe11018, "ATLK RamForbid"},
|
||||
{0xe1101c, "ATLK RamPermit"},
|
||||
{0xe11020, "ATLK ProEntry"},
|
||||
{0xe11022, "ATLK ProDOS"},
|
||||
{0xe11026, "ATLK SerStatus"},
|
||||
{0xe1102a, "ATLK SerWrite"},
|
||||
{0xe1102e, "ATLK SerRead"},
|
||||
{0xe1103e, "ATLK PFI"},
|
||||
{0xe1d600, "ATLK CmdTable"},
|
||||
{0xe1da00, "ATLK TickCount"}
|
||||
};
|
||||
|
||||
#define numAddresses (sizeof(addresses) / sizeof(addresses[0]))
|
||||
|
||||
static const char *addressLookup(uint32_t addr) {
|
||||
for (int i = 0; i < numAddresses; i++) {
|
||||
if (addresses[i].address >= addr) {
|
||||
if (addresses[i].address == addr)
|
||||
return addresses[i].comment;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (addr & ~0xffff)
|
||||
return addressLookup(addr & 0xffff); // try pageless
|
||||
return NULL;
|
||||
}
|
|
@ -0,0 +1,358 @@
|
|||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* The main disassembler.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include "disasm.h"
|
||||
#include "65816.h"
|
||||
#include "handle.h"
|
||||
#include "addresses.h"
|
||||
#include "prodos8.h"
|
||||
#include "prodos16.h"
|
||||
#include "smartport.h"
|
||||
#include "tools.h"
|
||||
|
||||
static void dumphex(uint8_t *ptr, uint32_t addr, uint32_t len) {
|
||||
uint8_t *eof = ptr + len;
|
||||
for (int line = 0; ptr < eof; line++) {
|
||||
printf("%02x/%04x: ", addr >> 16, addr & 0xffff);
|
||||
uint8_t *p = ptr;
|
||||
int skip = addr & 0xf;
|
||||
int i = 0;
|
||||
for (; i < skip; i++) {
|
||||
if (i == 8) {
|
||||
printf(" ");
|
||||
}
|
||||
printf(" ");
|
||||
}
|
||||
for (; i < 16 && p < eof; i++) {
|
||||
if (i == 8) {
|
||||
printf(" ");
|
||||
}
|
||||
printf("%02x ", *p++);
|
||||
}
|
||||
for (; i < 16; i++) {
|
||||
if (i == 8) {
|
||||
printf(" ");
|
||||
}
|
||||
printf(" ");
|
||||
}
|
||||
printf("| ");
|
||||
i = 0;
|
||||
for (; i < skip; i++) {
|
||||
if (i == 8) {
|
||||
printf(" ");
|
||||
}
|
||||
printf(" ");
|
||||
}
|
||||
for (; i < 16 && ptr < eof; i++) {
|
||||
if (i == 8) {
|
||||
printf(" ");
|
||||
}
|
||||
uint8_t c = *ptr++;
|
||||
addr++;
|
||||
printf("%c", (c >= ' ' && c <= '~') ? c : '.');
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
void disassemble(uint8_t *data, size_t len, Map *map) {
|
||||
uint8_t *ptr = data;
|
||||
uint8_t *end = data + len;
|
||||
|
||||
uint16_t x = 0;
|
||||
uint32_t val;
|
||||
int8_t delta;
|
||||
int16_t delta16;
|
||||
uint32_t d6;
|
||||
bool smart = false, dos8 = false, dos16 = false;
|
||||
|
||||
uint32_t addr = map->minMemory;
|
||||
|
||||
while (ptr < end) {
|
||||
MapFlags flags = map->mem[addr - map->minMemory];
|
||||
if ((flags & IsOpcode) || smart || dos8 || dos16) {
|
||||
printf("%02x/%04x:", addr >> 16, addr & 0xffff);
|
||||
uint8_t *start = ptr;
|
||||
uint8_t opcode = *ptr++;
|
||||
|
||||
const char *inst = opcodes[opcode].inst;
|
||||
Address mode = opcodes[opcode].address;
|
||||
|
||||
if (smart || dos8) {
|
||||
mode = DB;
|
||||
inst = "db";
|
||||
}
|
||||
if (dos16) {
|
||||
mode = DW;
|
||||
inst = "dw";
|
||||
}
|
||||
|
||||
uint16_t width = addressSizes[mode];
|
||||
if (mode == IMMM && (flags & (IsEmu | IsM8))) {
|
||||
width--;
|
||||
}
|
||||
if (mode == IMMX && (flags & (IsEmu | IsX8))) {
|
||||
width--;
|
||||
}
|
||||
addr += width;
|
||||
|
||||
for (int i = 0; i < width; i++) {
|
||||
printf(" %02x", start[i]);
|
||||
}
|
||||
for (int i = 0; i < 4 - width; i++) {
|
||||
printf(" ");
|
||||
}
|
||||
printf(" %s", inst);
|
||||
for (int i = strlen(inst); i < 8; i++) {
|
||||
printf(" ");
|
||||
}
|
||||
|
||||
const char *comments = NULL;
|
||||
uint8_t oprlen = 0;
|
||||
|
||||
switch (mode) {
|
||||
case IMP:
|
||||
break;
|
||||
case IMM:
|
||||
printf("#$%02x", *ptr++);
|
||||
oprlen = 4;
|
||||
break;
|
||||
case IMMM:
|
||||
if (flags & (IsEmu | IsM8)) {
|
||||
printf("#$%02x", *ptr++);
|
||||
oprlen = 4;
|
||||
} else {
|
||||
printf("#$%04x", r16(ptr)); ptr += 2;
|
||||
oprlen = 6;
|
||||
}
|
||||
break;
|
||||
case IMMX:
|
||||
if (flags & (IsEmu | IsX8)) {
|
||||
x = *ptr++;
|
||||
printf("#$%02x", x);
|
||||
oprlen = 4;
|
||||
} else {
|
||||
x = r16(ptr); ptr += 2;
|
||||
printf("#$%04x", x);
|
||||
oprlen = 6;
|
||||
}
|
||||
break;
|
||||
case IMMS:
|
||||
printf("#$%04x", r16(ptr)); ptr += 2;
|
||||
oprlen = 6;
|
||||
break;
|
||||
case ABS:
|
||||
val = r16(ptr); ptr += 2;
|
||||
printf("$%04x", val);
|
||||
oprlen = 5;
|
||||
comments = addressLookup(val);
|
||||
break;
|
||||
case ABL:
|
||||
val = r24(ptr); ptr += 3;
|
||||
printf("$%02x/%04x", val >> 16, val & 0xffff);
|
||||
oprlen = 8;
|
||||
comments = addressLookup(val);
|
||||
break;
|
||||
case ABX:
|
||||
printf("$%04x, x", r16(ptr)); ptr += 2;
|
||||
oprlen = 8;
|
||||
break;
|
||||
case ABY:
|
||||
printf("$%04x, y", r16(ptr)); ptr += 2;
|
||||
oprlen = 8;
|
||||
break;
|
||||
case ABLX:
|
||||
val = r24(ptr); ptr += 3;
|
||||
printf("$%02x/%04x, x", val >> 16, val & 0xffff);
|
||||
oprlen = 11;
|
||||
break;
|
||||
case AIX:
|
||||
printf("($%04x, x)", r16(ptr)); ptr += 2;
|
||||
oprlen = 10;
|
||||
break;
|
||||
case ZP:
|
||||
printf("$%02x", *ptr++);
|
||||
oprlen = 3;
|
||||
break;
|
||||
case ZPX:
|
||||
printf("$%02x, x", *ptr++);
|
||||
oprlen = 6;
|
||||
break;
|
||||
case ZPY:
|
||||
printf("$%02x, y", *ptr++);
|
||||
oprlen = 6;
|
||||
break;
|
||||
case ZPS:
|
||||
printf("$%02x, s", *ptr++);
|
||||
oprlen = 6;
|
||||
break;
|
||||
case IND:
|
||||
printf("($%04x)", r16(ptr)); ptr += 2;
|
||||
oprlen = 7;
|
||||
break;
|
||||
case INZ:
|
||||
printf("($%02x)", *ptr++);
|
||||
oprlen = 5;
|
||||
break;
|
||||
case INL:
|
||||
printf("[$%02x]", *ptr++);
|
||||
oprlen = 5;
|
||||
break;
|
||||
case INX:
|
||||
printf("($%02x, x)", *ptr++);
|
||||
oprlen = 8;
|
||||
break;
|
||||
case INY:
|
||||
printf("($%02x), y", *ptr++);
|
||||
oprlen = 8;
|
||||
break;
|
||||
case INLY:
|
||||
printf("[$%02x], y", *ptr++);
|
||||
oprlen = 8;
|
||||
break;
|
||||
case INS:
|
||||
printf("($%02x, s), y", *ptr++);
|
||||
oprlen = 11;
|
||||
break;
|
||||
case REL:
|
||||
delta = *ptr++;
|
||||
d6 = delta + addr;
|
||||
printf("$%02x/%04x", d6 >> 16, d6 & 0xffff);
|
||||
oprlen = 8;
|
||||
break;
|
||||
case RELL:
|
||||
delta16 = r16(ptr); ptr += 2;
|
||||
d6 = delta16 + addr;
|
||||
printf("$%02x/%04x", d6 >> 16, d6 & 0xffff);
|
||||
oprlen = 8;
|
||||
break;
|
||||
case BANK:
|
||||
val = *ptr++;
|
||||
printf("$%02x, $%02x", *ptr++, val);
|
||||
oprlen = 8;
|
||||
break;
|
||||
case DB:
|
||||
printf("$%02x", opcode);
|
||||
oprlen = 3;
|
||||
break;
|
||||
case DW:
|
||||
val = opcode | (*ptr++ << 8);
|
||||
printf("$%04x", val);
|
||||
oprlen = 5;
|
||||
break;
|
||||
case DD:
|
||||
printf("$%08x", opcode | r24(ptr) << 8); ptr += 3;
|
||||
oprlen = 9;
|
||||
break;
|
||||
}
|
||||
|
||||
if (smart) {
|
||||
comments = smartportLookup(opcode);
|
||||
smart = false;
|
||||
}
|
||||
if (dos8) {
|
||||
comments = prodos8Lookup(opcode);
|
||||
dos8 = false;
|
||||
}
|
||||
if (dos16) {
|
||||
comments = prodos16Lookup(val);
|
||||
dos16 = false;
|
||||
}
|
||||
|
||||
if (opcode == 0xa2) { // ldx
|
||||
if (*ptr == 0x22) { // jsl
|
||||
if (r24(ptr + 1) == 0xe10000) { // jsl el/0000
|
||||
comments = toolLookup(x);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (opcode == 0x20) { // jsr
|
||||
if (val == 0xc50d || val == 0xc70d) {
|
||||
smart = true;
|
||||
}
|
||||
if (val == 0xbf00) {
|
||||
dos8 = true;
|
||||
}
|
||||
}
|
||||
if (opcode == 0x22) { // jsl
|
||||
if (val == 0xe100a8) {
|
||||
dos16 = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (comments != NULL) {
|
||||
for (int i = oprlen; i < 16; i++) {
|
||||
printf(" ");
|
||||
}
|
||||
printf("; %s", comments);
|
||||
}
|
||||
|
||||
uint16_t nextFlags = map->mem[addr - map->minMemory];
|
||||
if (((flags ^ nextFlags) & (IsEmu | IsM8 | IsX8)) && comments == NULL &&
|
||||
(nextFlags & IsOpcode)) {
|
||||
for (int i = oprlen; i < 16; i++) {
|
||||
printf(" ");
|
||||
}
|
||||
printf(";");
|
||||
if ((flags ^ nextFlags) & IsEmu) {
|
||||
if (nextFlags & IsEmu) {
|
||||
printf(" 8-bit mode");
|
||||
} else {
|
||||
printf(" 16-bit mode");
|
||||
}
|
||||
}
|
||||
if ((flags ^ nextFlags) & IsM8) {
|
||||
if (nextFlags & IsM8) {
|
||||
printf(" a.b");
|
||||
} else {
|
||||
printf(" a.w");
|
||||
}
|
||||
}
|
||||
if ((flags ^ nextFlags) & IsX8) {
|
||||
if (nextFlags & IsX8) {
|
||||
printf(" x.b");
|
||||
} else {
|
||||
printf(" x.w");
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
} else {
|
||||
uint32_t dlen = 0;
|
||||
uint8_t *p = ptr;
|
||||
while (p < end && !(map->mem[addr + dlen - map->minMemory] & IsOpcode)) {
|
||||
p++;
|
||||
dlen++;
|
||||
}
|
||||
uint32_t val;
|
||||
switch (dlen) {
|
||||
case 4:
|
||||
printf("%02x/%04x:", addr >> 16, addr & 0xffff);
|
||||
val = r32(ptr);
|
||||
printf(" %02x %02x %02x %02x dd $%08x\n", val & 0xff,
|
||||
(val >> 8) & 0xff, (val >> 16) & 0xff, val >> 24, val);
|
||||
break;
|
||||
case 2:
|
||||
printf("%02x/%04x:", addr >> 16, addr & 0xffff);
|
||||
val = r16(ptr);
|
||||
printf(" %02x %02x dw $%04x\n", val & 0xff, val >> 8, val);
|
||||
break;
|
||||
case 1:
|
||||
printf("%02x/%04x:", addr >> 16, addr & 0xffff);
|
||||
printf(" %02x db $%04x\n", *ptr, *ptr);
|
||||
break;
|
||||
default:
|
||||
dumphex(ptr, addr, dlen);
|
||||
break;
|
||||
}
|
||||
ptr += dlen;
|
||||
addr += dlen;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* The main disassembler.
|
||||
*/
|
||||
|
||||
#include "map.h"
|
||||
|
||||
extern void disassemble(uint8_t *data, size_t len, Map *map);
|
|
@ -0,0 +1,41 @@
|
|||
#pragma once
|
||||
|
||||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* Routines for reading multi-byte numbers from a stream
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
static inline uint32_t fourcc(const char *p) {
|
||||
return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
|
||||
}
|
||||
|
||||
static inline uint16_t r16(uint8_t *p) {
|
||||
uint16_t r = *p++;
|
||||
r |= *p << 8;
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline uint32_t r24(uint8_t *p) {
|
||||
uint32_t r = *p++;
|
||||
r |= *p++ << 8;
|
||||
r |= *p << 16;
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline uint32_t r32(uint8_t *p) {
|
||||
uint32_t r = *p++;
|
||||
r |= *p++ << 8;
|
||||
r |= *p++ << 16;
|
||||
r |= *p << 24;
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline uint32_t r4(uint8_t *p) {
|
||||
uint32_t r = *p++ << 24;
|
||||
r |= *p++ << 16;
|
||||
r |= *p++ << 8;
|
||||
r |= *p;
|
||||
return r;
|
||||
}
|
|
@ -0,0 +1,142 @@
|
|||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* Handles the memory map, for the tracing disassembler.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include "map.h"
|
||||
#include "parser.h"
|
||||
#include "handle.h"
|
||||
|
||||
static Rule *parseRule(ConfigFile *f) {
|
||||
Rule *rule = malloc(sizeof(Rule));
|
||||
rule->next = NULL;
|
||||
if (!token(f, '$')) {
|
||||
fail(f, "Address must be a hex value above 0 \n"
|
||||
"starting with '$', i.e. $c20");
|
||||
}
|
||||
rule->address = hex(f);
|
||||
if (token(f, '/')) {
|
||||
rule->address <<= 16;
|
||||
rule->address |= hex(f);
|
||||
}
|
||||
if (rule->address == 0) {
|
||||
fail(f, "Address must be a hex value above 0 \n"
|
||||
"starting with '$', i.e. $c20");
|
||||
}
|
||||
if (!token(f, ':')) {
|
||||
fail(f, "Expected ':'");
|
||||
}
|
||||
rule->flags = IsOpcode;
|
||||
bool foundFlag = false;
|
||||
do {
|
||||
foundFlag = false;
|
||||
if (token(f, 'e')) {
|
||||
rule->flags |= IsEmu;
|
||||
foundFlag = true;
|
||||
}
|
||||
if (token(f, 'm')) {
|
||||
rule->flags |= IsM8;
|
||||
foundFlag = true;
|
||||
}
|
||||
if (token(f, 'x')) {
|
||||
rule->flags |= IsX8;
|
||||
foundFlag = true;
|
||||
}
|
||||
} while (foundFlag);
|
||||
return rule;
|
||||
}
|
||||
|
||||
Map *loadMap(const char *filename, uint32_t org, MapFlags flags) {
|
||||
Map *map = malloc(sizeof(Map));
|
||||
map->rules = NULL;
|
||||
map->minMemory = org;
|
||||
map->maxMemory = 0;
|
||||
map->mem = NULL;
|
||||
|
||||
FILE *f = fopen(filename, "rb");
|
||||
if (!f) {
|
||||
fprintf(stderr, "Failed to open '%s'\n", filename);
|
||||
exit(-1);
|
||||
}
|
||||
fseek(f, 0, SEEK_END);
|
||||
size_t len = ftell(f);
|
||||
fseek(f, 0, SEEK_SET);
|
||||
uint8_t *data = malloc(len);
|
||||
fread(data, len, 1, f);
|
||||
fclose(f);
|
||||
|
||||
if (r4(data) != fourcc("gMAP")) {
|
||||
// not a map file, use org as the only entry point
|
||||
map->rules = malloc(sizeof(Rule));
|
||||
map->rules->address = org;
|
||||
map->rules->flags = flags;
|
||||
map->rules->next = NULL;
|
||||
map->filename = filename;
|
||||
free(data);
|
||||
return map;
|
||||
}
|
||||
ConfigFile c;
|
||||
c.start = data;
|
||||
c.p = c.start;
|
||||
c.end = c.start + len;
|
||||
c.filename = filename;
|
||||
|
||||
// set filename
|
||||
c.p += 4;
|
||||
eatSpaces(&c);
|
||||
if (!token(&c, '"')) {
|
||||
fail(&c, "Expected '\"' around the filename.");
|
||||
}
|
||||
uint8_t *fnp = c.p;
|
||||
while (fnp < c.end && *fnp != '"') {
|
||||
fnp++;
|
||||
}
|
||||
if (fnp == c.end) {
|
||||
fail(&c, "Filename has no closing '\"'.");
|
||||
}
|
||||
int flen = fnp - c.p;
|
||||
char *fname = malloc(flen);
|
||||
memcpy(fname, c.p, flen);
|
||||
fname[flen] = 0;
|
||||
map->filename = fname;
|
||||
c.p = fnp + 1;
|
||||
|
||||
eatSpaces(&c);
|
||||
if (r4(c.p) != fourcc("sORG")) {
|
||||
fail(&c, "Expected 'sORG' tag");
|
||||
}
|
||||
c.p += 4;
|
||||
eatSpaces(&c);
|
||||
if (!token(&c, '$')) {
|
||||
fail(&c, "ORG must be a hex value above 0\n"
|
||||
"starting with '$', i.e. $c20");
|
||||
}
|
||||
map->minMemory = hex(&c);
|
||||
if (map->minMemory == 0) {
|
||||
fail(&c, "ORG must be a hex value above 0\n"
|
||||
"starting with '$', i.e. $c20");
|
||||
}
|
||||
eatSpaces(&c);
|
||||
|
||||
// load rules
|
||||
Rule *lastRule = NULL;
|
||||
while (c.p < c.end) {
|
||||
Rule *rule = parseRule(&c);
|
||||
if (lastRule == NULL) {
|
||||
map->rules = rule;
|
||||
} else {
|
||||
lastRule->next = rule;
|
||||
}
|
||||
lastRule = rule;
|
||||
eatSpaces(&c);
|
||||
}
|
||||
free(c.start);
|
||||
|
||||
return map;
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
#pragma once
|
||||
|
||||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* The memory map for the tracing disassembler
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
typedef enum {
|
||||
IsData = 0x01,
|
||||
IsOpcode = 0x02,
|
||||
IsOperand = 0x04,
|
||||
IsX8 = 0x10,
|
||||
IsM8 = 0x20,
|
||||
IsEmu = 0x100
|
||||
} MapFlags;
|
||||
|
||||
typedef struct Rule {
|
||||
uint32_t address;
|
||||
uint16_t flags;
|
||||
struct Rule *next;
|
||||
} Rule;
|
||||
|
||||
typedef struct {
|
||||
Rule *rules;
|
||||
uint32_t minMemory;
|
||||
uint32_t maxMemory;
|
||||
MapFlags *mem;
|
||||
const char *filename;
|
||||
} Map;
|
||||
|
||||
extern Map *loadMap(const char *filename, uint32_t org, MapFlags flags);
|
|
@ -0,0 +1,568 @@
|
|||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* Handles parsing and relocating an OMF (s16, tool, etc)
|
||||
*/
|
||||
|
||||
#include "handle.h"
|
||||
#include "parser.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <argp.h>
|
||||
|
||||
const char *argp_program_version = "omf 0.5";
|
||||
const char *argp_program_bug_address = "sean@seancode.com";
|
||||
static char doc[] = "Relocate and extract OMF segments"
|
||||
"\vThis should be run twice. The first time to generate the map."
|
||||
"The second time, to use that map to relocate and extract the segments";
|
||||
static char args_doc[] = "FILE";
|
||||
static struct argp_option options[] = {
|
||||
{"org", 'o', "ADDRESS", OPTION_ARG_OPTIONAL,
|
||||
"Start mapping the segments at this address, default 20000"},
|
||||
{"map", 'm', "FILE", OPTION_ARG_OPTIONAL,
|
||||
"Use this map to extract the segments"},
|
||||
{"prefix", 'p', "PREFIX", OPTION_ARG_OPTIONAL,
|
||||
"Prefix segment files with this. Default \"seg\""},
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
struct arguments {
|
||||
char *filename;
|
||||
char *map;
|
||||
char *prefix;
|
||||
uint32_t org;
|
||||
};
|
||||
|
||||
static inline uint32_t parseNum(const char *s) {
|
||||
uint32_t res = 0;
|
||||
while (isspace(*s)) {
|
||||
s++;
|
||||
}
|
||||
while (isxdigit(*s)) {
|
||||
res <<= 4;
|
||||
if (*s >= '0' && *s <= '9') {
|
||||
res |= *s - '0';
|
||||
} else if (*s >= 'a' && *s <= 'f') {
|
||||
res |= *s - 'a' + 10;
|
||||
} else if (*s >= 'A' && *s <= 'F') {
|
||||
res |= *s - 'A' + 10;
|
||||
}
|
||||
s++;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
||||
struct arguments *arguments = state->input;
|
||||
switch (key) {
|
||||
case 'm':
|
||||
arguments->map = arg;
|
||||
break;
|
||||
case 'p':
|
||||
arguments->prefix = arg;
|
||||
break;
|
||||
case 'o':
|
||||
if (arg) {
|
||||
arguments->org = parseNum(arg);
|
||||
}
|
||||
break;
|
||||
case ARGP_KEY_ARG:
|
||||
if (state->arg_num >= 1) {
|
||||
argp_usage(state);
|
||||
}
|
||||
arguments->filename = arg;
|
||||
break;
|
||||
case ARGP_KEY_END:
|
||||
if (state->arg_num < 1) {
|
||||
argp_usage(state);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return ARGP_ERR_UNKNOWN;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct argp argp = { options, parse_opt, args_doc, doc };
|
||||
|
||||
|
||||
typedef struct Segment {
|
||||
uint32_t bytecnt;
|
||||
uint32_t resspc;
|
||||
uint32_t length;
|
||||
uint8_t lablen;
|
||||
uint8_t numlen;
|
||||
uint32_t banksize;
|
||||
uint16_t kind;
|
||||
uint32_t org;
|
||||
uint32_t align;
|
||||
uint16_t segnum;
|
||||
uint32_t entry;
|
||||
char name[256];
|
||||
uint8_t *offset;
|
||||
uint8_t *data;
|
||||
uint32_t mapped;
|
||||
struct Segment *next;
|
||||
} Segment;
|
||||
|
||||
static Segment *loadOMF(uint8_t *data, size_t len);
|
||||
static void mapSegments(Segment *segments, uint32_t min);
|
||||
static void relocSegments(Segment *segments, char *prefix);
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
struct arguments arguments;
|
||||
arguments.filename = "";
|
||||
arguments.map = NULL;
|
||||
arguments.prefix = "seg";
|
||||
arguments.org = 0x20000;
|
||||
argp_parse(&argp, argc, argv, 0, 0, &arguments);
|
||||
|
||||
// open omf
|
||||
FILE *f = fopen(arguments.filename, "rb");
|
||||
if (!f) {
|
||||
fprintf(stderr, "Failed to open '%s'\n", arguments.filename);
|
||||
return -1;
|
||||
}
|
||||
fseek(f, 0, SEEK_END);
|
||||
size_t len = ftell(f);
|
||||
fseek(f, 0, SEEK_SET);
|
||||
uint8_t *data = malloc(len);
|
||||
fread(data, len, 1, f);
|
||||
fclose(f);
|
||||
|
||||
Segment *segments = loadOMF(data, len);
|
||||
if (arguments.map != NULL) {
|
||||
// load the map!
|
||||
f = fopen(arguments.map, "rb");
|
||||
if (!f) {
|
||||
fprintf(stderr, "Failed to open '%s'\n", arguments.map);
|
||||
return -1;
|
||||
}
|
||||
ConfigFile c;
|
||||
fseek(f, 0, SEEK_END);
|
||||
len = ftell(f);
|
||||
fseek(f, 0, SEEK_SET);
|
||||
c.start = malloc(len);
|
||||
fread(c.start, len, 1, f);
|
||||
fclose(f);
|
||||
c.p = c.start;
|
||||
c.end = c.start + len;
|
||||
|
||||
while (c.p < c.end) {
|
||||
uint32_t segnum = hex(&c);
|
||||
if (!token(&c, ':')) {
|
||||
fprintf(stderr, "Error: expected ':' in map.\n");
|
||||
exit(-1);
|
||||
}
|
||||
uint32_t mapped = hex(&c);
|
||||
|
||||
for (Segment *seg = segments; seg != NULL; seg = seg->next) {
|
||||
if (seg->segnum == segnum) {
|
||||
seg->mapped = mapped;
|
||||
}
|
||||
}
|
||||
eatSpaces(&c);
|
||||
}
|
||||
free(c.start);
|
||||
}
|
||||
|
||||
// map any unmapped segments
|
||||
mapSegments(segments, arguments.org);
|
||||
|
||||
if (arguments.map != NULL) {
|
||||
relocSegments(segments, arguments.prefix);
|
||||
} else {
|
||||
int mlen = strlen(arguments.filename);
|
||||
char *mapname = malloc(mlen + 5);
|
||||
memcpy(mapname, arguments.filename, mlen);
|
||||
memcpy(mapname + mlen, ".map\0", 5);
|
||||
f = fopen(mapname, "wb");
|
||||
if (!f) {
|
||||
fprintf(stderr, "Failed to create '%s'\n", mapname);
|
||||
return -1;
|
||||
}
|
||||
for (Segment *seg = segments; seg != NULL; seg = seg->next) {
|
||||
fprintf(f, "%x:%x\n", seg->segnum, seg->mapped);
|
||||
}
|
||||
fclose(f);
|
||||
fprintf(stdout, "Created '%s'. Edit it, and extract with: \n"
|
||||
" %s --map=%s %s\n", mapname, argv[0], mapname, arguments.filename);
|
||||
}
|
||||
|
||||
free(data);
|
||||
}
|
||||
|
||||
static Segment *loadOMF(uint8_t *data, size_t len) {
|
||||
Segment *last = NULL;
|
||||
Segment *segments = NULL;
|
||||
|
||||
size_t ofs = 0;
|
||||
while (ofs < len) {
|
||||
Segment *seg = malloc(sizeof(Segment));
|
||||
seg->next = NULL;
|
||||
|
||||
uint8_t *p = data + ofs;
|
||||
seg->bytecnt = r32(p); p += 4;
|
||||
seg->resspc = r32(p); p += 4;
|
||||
seg->length = r32(p); p += 4;
|
||||
uint8_t kind = *p++;
|
||||
seg->lablen = *p++;
|
||||
seg->numlen = *p++;
|
||||
uint8_t version = *p++;
|
||||
seg->banksize = r32(p); p += 4;
|
||||
seg->kind = r16(p); p += 2;
|
||||
p += 2; // undefined
|
||||
seg->org = r32(p); p += 4;
|
||||
seg->align = r32(p); p += 4;
|
||||
p += 2; // byte order
|
||||
seg->segnum = r16(p); p += 2;
|
||||
seg->entry = r32(p); p += 4;
|
||||
uint16_t dispname = r16(p); p += 2;
|
||||
uint16_t dispdata = r16(p); p += 2;
|
||||
p = data + ofs + dispname + 0xa;
|
||||
uint8_t strlen = seg->lablen;
|
||||
if (strlen == 0) {
|
||||
strlen = *p++;
|
||||
}
|
||||
memcpy(seg->name, p, strlen);
|
||||
seg->name[strlen] = 0;
|
||||
seg->offset = data + ofs + dispdata;
|
||||
if (version == 1) { // convert to v2
|
||||
seg->bytecnt *= 512;
|
||||
seg->kind = (kind & 0x1f) | ((kind & 0xe0) << 8);
|
||||
}
|
||||
seg->mapped = 0;
|
||||
seg->data = NULL;
|
||||
|
||||
ofs += seg->bytecnt;
|
||||
if (last == NULL) {
|
||||
segments = seg;
|
||||
} else {
|
||||
last->next = seg;
|
||||
}
|
||||
last = seg;
|
||||
}
|
||||
return segments;
|
||||
}
|
||||
|
||||
static int cmpmemory(const void *p1, const void *p2) {
|
||||
const uint32_t *a = p1, *b = p2;
|
||||
return *a - *b;
|
||||
}
|
||||
|
||||
static void mapSegments(Segment *segments, uint32_t min) {
|
||||
// we use a memory map that denotes runes of available memory.
|
||||
// Each segment has a start and end, so we need an array of twice the
|
||||
// number of segments (+2 for the absolute start and end of memory)
|
||||
|
||||
// count segments
|
||||
uint32_t numSegs = 0;
|
||||
for (Segment *seg = segments; seg != NULL; seg = seg->next) {
|
||||
numSegs++;
|
||||
}
|
||||
|
||||
uint32_t *memory = malloc(sizeof(uint32_t) * (numSegs * 2 + 2));
|
||||
int numNodes = 0;
|
||||
memory[numNodes++] = min; // minimum
|
||||
memory[numNodes++] = 0x1000000; // maximum possible memory for the IIgs.
|
||||
|
||||
// step one, map hardcoded or overridden targets
|
||||
for (Segment *seg = segments; seg != NULL; seg = seg->next) {
|
||||
if (seg->org != 0 || seg->mapped != 0) {
|
||||
if (seg->mapped == 0) {
|
||||
if ((seg->kind & 0x1f) == 0x11) { // absolute bank
|
||||
seg->mapped = seg->org << 16;
|
||||
} else {
|
||||
seg->mapped = seg->org;
|
||||
}
|
||||
}
|
||||
bool collision = false;
|
||||
// verify we aren't overlapping.. that would be tremendously bad.
|
||||
for (int node = 0; node < numNodes; node += 2) {
|
||||
if (seg->mapped < memory[node] &&
|
||||
seg->mapped + seg->length > memory[node]) { // crosses!
|
||||
collision = true;
|
||||
}
|
||||
if (seg->mapped < memory[node + 1] &&
|
||||
seg->mapped + seg->length > memory[node + 1]) { // crosses!
|
||||
collision = true;
|
||||
}
|
||||
}
|
||||
if (collision) {
|
||||
fprintf(stderr, "Segment #$%x collides with another segment!\n",
|
||||
seg->segnum);
|
||||
exit(-1);
|
||||
}
|
||||
memory[numNodes++] = seg->mapped;
|
||||
memory[numNodes++] = seg->mapped + seg->length;
|
||||
if (seg->mapped < memory[0]) { // below the minimum!
|
||||
memory[0] = seg->mapped; // recalibrate the minimum
|
||||
}
|
||||
// resort memory map
|
||||
qsort(memory, numNodes, sizeof(uint32_t), cmpmemory);
|
||||
}
|
||||
}
|
||||
|
||||
// finally, map everything else by first fit.
|
||||
for (Segment *seg = segments; seg != NULL; seg = seg->next) {
|
||||
if (seg->mapped == 0) {
|
||||
for (int node = 0; node < numNodes; node += 2) {
|
||||
uint32_t base = memory[node];
|
||||
if (seg->align && (base & (seg->align - 1))) { // snap to alignment
|
||||
base += seg->align;
|
||||
base &= ~(seg->align - 1);
|
||||
}
|
||||
if (seg->banksize &&(((base & (seg->banksize - 1)) + seg->length) &
|
||||
~(seg->banksize - 1))) { // crosses bank
|
||||
base += seg->banksize;
|
||||
base &= ~(seg->banksize - 1);
|
||||
}
|
||||
// does it fit?
|
||||
if (base < memory[node + 1] && memory[node + 1] - base >= seg->length) {
|
||||
seg->mapped = base;
|
||||
memory[numNodes++] = seg->mapped;
|
||||
memory[numNodes++] = seg->mapped + seg->length;
|
||||
qsort(memory, numNodes, sizeof(uint32_t), cmpmemory);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (seg->mapped == 0) {
|
||||
fprintf(stderr, "Failed to map Segment #$%x, not enough free memory\n",
|
||||
seg->segnum);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
free(memory);
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
DONE = 0x00,
|
||||
RELOC = 0xe2,
|
||||
INTERSEG = 0xe3,
|
||||
DS = 0xf1,
|
||||
LCONST = 0xf2,
|
||||
cRELOC = 0xf5,
|
||||
cINTERSEG = 0xf6,
|
||||
SUPER = 0xf7
|
||||
} SegOp;
|
||||
|
||||
static void patch(uint8_t *data, uint8_t numBytes, uint32_t value) {
|
||||
for (int i = 0; i < numBytes; i++, value >>= 8) {
|
||||
data[i] = value & 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
static void hexout(char *p, uint32_t val, int len) {
|
||||
p += len;
|
||||
while (len-- > 0) {
|
||||
char ch = val & 0xf;
|
||||
val >>= 4;
|
||||
if (ch < 10) {
|
||||
*--p = '0' + ch;
|
||||
} else {
|
||||
*--p = 'a' + (ch - 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void relocSegments(Segment *segments, char *prefix) {
|
||||
int prefixLen = strlen(prefix);
|
||||
char *filename = malloc(prefixLen + 4);
|
||||
char *mapname = malloc(prefixLen + 9);
|
||||
|
||||
for (Segment *seg = segments; seg != NULL; seg = seg->next) {
|
||||
bool done = false;
|
||||
uint32_t pc = seg->mapped;
|
||||
uint8_t *p = seg->offset;
|
||||
seg->data = calloc(seg->length, 1);
|
||||
|
||||
while (!done) {
|
||||
uint8_t opcode = *p++;
|
||||
switch (opcode) {
|
||||
case DONE:
|
||||
done = true;
|
||||
break;
|
||||
case RELOC:
|
||||
{
|
||||
uint8_t numBytes = *p++;
|
||||
int8_t bitShift = *p++;
|
||||
uint32_t offset = r32(p); p += 4;
|
||||
uint32_t subOffset = r32(p) + seg->mapped; p += 4;
|
||||
|
||||
if (bitShift < 0) {
|
||||
subOffset >>= -bitShift;
|
||||
} else {
|
||||
subOffset <<= bitShift;
|
||||
}
|
||||
patch(seg->data + offset, numBytes, subOffset);
|
||||
}
|
||||
break;
|
||||
case INTERSEG:
|
||||
{
|
||||
uint8_t numBytes = *p++;
|
||||
int8_t bitShift = *p++;
|
||||
uint32_t offset = r32(p); p += 4;
|
||||
p += 2; // filenum
|
||||
uint16_t segnum = r16(p); p += 2;
|
||||
uint32_t subOffset = r32(p); p += 4;
|
||||
for (Segment *sub = segments; sub != NULL; sub = sub->next) {
|
||||
if (sub->segnum == segnum) {
|
||||
subOffset += sub->mapped;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (bitShift < 0) {
|
||||
subOffset >>= -bitShift;
|
||||
} else {
|
||||
subOffset <<= bitShift;
|
||||
}
|
||||
patch(seg->data + offset, numBytes, subOffset);
|
||||
}
|
||||
break;
|
||||
case DS:
|
||||
pc += r32(p); p += 4; // filled with zeros
|
||||
break;
|
||||
case LCONST:
|
||||
{
|
||||
uint32_t count = r32(p); p += 4;
|
||||
memcpy(seg->data + pc - seg->mapped, p, count); p += count;
|
||||
pc += count;
|
||||
}
|
||||
break;
|
||||
case cRELOC:
|
||||
{
|
||||
uint8_t numBytes = *p++;
|
||||
int8_t bitShift = *p++;
|
||||
uint16_t offset = r16(p); p += 2;
|
||||
uint32_t subOffset = r16(p) + seg->mapped; p += 2;
|
||||
if (bitShift < 0) {
|
||||
subOffset >>= -bitShift;
|
||||
} else {
|
||||
subOffset <<= bitShift;
|
||||
}
|
||||
patch(seg->data + offset, numBytes, subOffset);
|
||||
}
|
||||
break;
|
||||
case cINTERSEG:
|
||||
{
|
||||
uint8_t numBytes = *p++;
|
||||
int8_t bitShift = *p++;
|
||||
uint16_t offset = r16(p); p += 2;
|
||||
uint8_t segnum = *p++;
|
||||
uint32_t subOffset = r16(p); p += 2;
|
||||
for (Segment *sub = segments; sub != NULL; sub = sub->next) {
|
||||
if (sub->segnum == segnum) {
|
||||
subOffset += sub->mapped;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (bitShift < 0) {
|
||||
subOffset >>= -bitShift;
|
||||
} else {
|
||||
subOffset <<= bitShift;
|
||||
}
|
||||
patch(seg->data + offset, numBytes, subOffset);
|
||||
}
|
||||
break;
|
||||
case SUPER:
|
||||
{
|
||||
uint32_t superLen = r32(p); p += 4;
|
||||
uint8_t *superEnd = p + superLen;
|
||||
uint8_t superType = *p++;
|
||||
uint32_t superPage = 0;
|
||||
while (p < superEnd) {
|
||||
uint8_t numOfs = *p++;
|
||||
if (numOfs & 0x80) {
|
||||
superPage += 256 * (numOfs & 0x7f);
|
||||
continue;
|
||||
}
|
||||
for (int o = 0; o <= numOfs; o++) {
|
||||
uint32_t offset = superPage | *p++;
|
||||
uint8_t numBytes = 0;
|
||||
uint32_t subOffset = r16(seg->data + offset);
|
||||
if (superType == 0 || superType == 1) { // RELOC2 | RELOC3
|
||||
subOffset += seg->mapped;
|
||||
numBytes = 2 + superType;
|
||||
} else if (superType < 14) { // INTERSEG1--12
|
||||
uint8_t segnum = seg->data[offset + 2];
|
||||
for (Segment *sub = segments; sub != NULL; sub = sub->next) {
|
||||
if (sub->segnum == segnum) {
|
||||
subOffset += sub->mapped;
|
||||
break;
|
||||
}
|
||||
}
|
||||
numBytes = 3;
|
||||
} else if (superType < 26) { // INTERSEG13--24
|
||||
uint8_t segnum = superType - 13;
|
||||
for (Segment *sub = segments; sub != NULL; sub = sub->next) {
|
||||
if (sub->segnum == segnum) {
|
||||
subOffset += sub->mapped;
|
||||
break;
|
||||
}
|
||||
}
|
||||
numBytes = 2;
|
||||
} else { // INTERSEG25--36
|
||||
uint8_t segnum = superType - 25;
|
||||
for (Segment *sub = segments; sub != NULL; sub = sub->next) {
|
||||
if (sub->segnum == segnum) {
|
||||
subOffset += sub->mapped;
|
||||
break;
|
||||
}
|
||||
}
|
||||
subOffset >>= 16;
|
||||
numBytes = 2;
|
||||
}
|
||||
patch(seg->data + offset, numBytes, subOffset);
|
||||
}
|
||||
superPage += 256;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (opcode < 0xe0) {
|
||||
memcpy(seg->data + pc - seg->mapped, p, opcode); p += opcode;
|
||||
pc += opcode;
|
||||
} else {
|
||||
fprintf(stderr, "Unknown segment code: %x\n", opcode);
|
||||
exit(-1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(filename, prefix, prefixLen);
|
||||
int numLen = 3;
|
||||
if (seg->segnum < 0x10) {
|
||||
numLen = 1;
|
||||
} else if (seg->segnum < 0x100) {
|
||||
numLen = 2;
|
||||
}
|
||||
hexout(filename + prefixLen, seg->segnum, numLen);
|
||||
filename[prefixLen + numLen] = 0;
|
||||
memcpy(mapname, filename, prefixLen + numLen);
|
||||
memcpy(mapname + prefixLen + numLen, ".map\0", 5);
|
||||
|
||||
FILE *f = fopen(filename, "wb");
|
||||
if (!f) {
|
||||
fprintf(stderr, "Failed to create '%s'\n", filename);
|
||||
exit(-1);
|
||||
}
|
||||
fwrite(seg->data, 1, seg->length, f);
|
||||
fclose(f);
|
||||
f = fopen(mapname, "wb");
|
||||
if (!f) {
|
||||
fprintf(stderr, "Failed to create '%s'\n", mapname);
|
||||
exit(-1);
|
||||
}
|
||||
fprintf(f, "gMAP \"%s\"\n", filename);
|
||||
fprintf(f, "sORG $%x\n", seg->mapped);
|
||||
if ((seg->kind & 0x1f) == 0) { // code
|
||||
fprintf(f, "$%x:\n", seg->mapped + seg->entry);
|
||||
}
|
||||
fclose(f);
|
||||
fprintf(stdout, "Extracted Segment #$%x %s into %s\n", seg->segnum,
|
||||
seg->name, filename);
|
||||
fprintf(stdout, "Created map %s\n", mapname);
|
||||
}
|
||||
free(filename);
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* Routines for parsing a simple config file
|
||||
*/
|
||||
|
||||
#include "parser.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
void fail(ConfigFile *f, char *format, ...) {
|
||||
// calculate line and column
|
||||
int line = 1;
|
||||
int col = 1;
|
||||
bool done = false;
|
||||
while (f->p > f->start) {
|
||||
if (*f->p == '\n') {
|
||||
done = true;
|
||||
line++;
|
||||
}
|
||||
if (!done) {
|
||||
col++;
|
||||
}
|
||||
f->p--;
|
||||
}
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
fprintf(stderr, "%s[%d,%d] Error: ", f->filename, line, col);
|
||||
vfprintf(stderr, format, args);
|
||||
fprintf(stderr, "\n");
|
||||
va_end(args);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
void eatSpaces(ConfigFile *f) {
|
||||
while (f->p < f->end && isspace(*f->p)) {
|
||||
f->p++;
|
||||
}
|
||||
}
|
||||
|
||||
bool token(ConfigFile *f, char ch) {
|
||||
eatSpaces(f);
|
||||
if (f->p < f->end && *f->p == ch) { // found it, consume
|
||||
f->p++;
|
||||
return true;
|
||||
}
|
||||
// not found, don't consume anything
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t hex(ConfigFile *f) {
|
||||
eatSpaces(f);
|
||||
uint32_t res = 0;
|
||||
while (f->p < f->end && isxdigit(*f->p)) {
|
||||
res <<= 4;
|
||||
if (*f->p >= '0' && *f->p <= '9') {
|
||||
res |= *f->p - '0';
|
||||
} else if (*f->p >= 'a' && *f->p <= 'f') {
|
||||
res |= *f->p - 'a' + 10;
|
||||
} else if (*f->p >= 'A' && *f->p <= 'F') {
|
||||
res |= *f->p - 'A' + 10;
|
||||
}
|
||||
f->p++;
|
||||
}
|
||||
return res;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* Routines for parsing simple config files
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
typedef struct {
|
||||
uint8_t *start;
|
||||
uint8_t *p;
|
||||
uint8_t *end;
|
||||
const char *filename;
|
||||
} ConfigFile;
|
||||
|
||||
extern void fail(ConfigFile *f, char *format, ...);
|
||||
extern void eatSpaces(ConfigFile *f);
|
||||
extern bool token(ConfigFile *f, char ch);
|
||||
extern uint32_t hex(ConfigFile *f);
|
|
@ -0,0 +1,42 @@
|
|||
{********************************************
|
||||
; File: ACE.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT ACE;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
CONST
|
||||
aceNoError = $0; {Error - }
|
||||
aceIsActive = $1D01; {Error - }
|
||||
aceBadDP = $1D02; {Error - }
|
||||
aceNotActive = $1D03; {Error - }
|
||||
aceNoSuchParam = $1D04; {Error - }
|
||||
aceBadMethod = $1D05; {Error - }
|
||||
aceBadSrc = $1D06; {Error - }
|
||||
aceBadDest = $1D07; {Error - }
|
||||
aceDataOverlap = $1D08; {Error - }
|
||||
aceNotImplemented = $1DFF; {Error - }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
PROCEDURE ACEBootInit ; Tool $1D,$01;
|
||||
PROCEDURE ACEStartUp ( dPageAddr:Integer) ; Tool $1D,$02;
|
||||
PROCEDURE ACEShutDown ; Tool $1D,$03;
|
||||
FUNCTION ACEVersion : Integer ; Tool $1D,$04;
|
||||
PROCEDURE ACEReset ; Tool $1D,$05;
|
||||
FUNCTION ACEStatus : Boolean ; Tool $1D,$06;
|
||||
FUNCTION ACEInfo ( infoItemCode:Integer) : Longint ; Tool $1D,$07;
|
||||
PROCEDURE ACECompBegin ; Tool $1D,$0B;
|
||||
PROCEDURE ACECompress ( src:Handle; srcOffset:Longint; dest:Handle;
|
||||
destOffset:Longint; nBlks:Integer; method:Integer) ; Tool $1D,$09;
|
||||
PROCEDURE ACEExpand ( src:Handle; srcOffset:Longint; dest:Handle;
|
||||
destOffset:Longint; nBlks:Integer; method:Integer) ; Tool $1D,$0A;
|
||||
PROCEDURE ACEExpBegin ; Tool $1D,$0C;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,102 @@
|
|||
{********************************************
|
||||
; File: ADB.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT ADB;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
cmndIncomplete = $0910; {error - Command not completed. }
|
||||
cantSync = $0911; {error - Can't synchronize }
|
||||
adbBusy = $0982; {error - Busy (command pending) }
|
||||
devNotAtAddr = $0983; {error - Device not present at address }
|
||||
srqListFull = $0984; {error - List full }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
readModes = $000A; {ReadKeyMicroData - }
|
||||
readConfig = $000B; {ReadKeyMicroData - }
|
||||
readADBError = $000C; {ReadKeyMicroData - }
|
||||
readVersionNum = $000D; {ReadKeyMicroData - }
|
||||
readAvailCharSet = $000E; {ReadKeyMicroData - }
|
||||
readAvailLayout = $000F; {ReadKeyMicroData - }
|
||||
readMicroMem = $0009; {ReadKeyMicroMem - }
|
||||
abort = $0001; {SendInfo - command }
|
||||
resetKbd = $0002; {SendInfo - command }
|
||||
flushKbd = $0003; {SendInfo - command }
|
||||
setModes = $0004; {SendInfo - 2nd param is pointer to mode byte }
|
||||
clearModes = $0005; {SendInfo - 2nd param is pointer to mode Byte }
|
||||
setConfig = $0006; {SendInfo - 2nd param is pointer to SetConfigRec }
|
||||
synch = $0007; {SendInfo - 2nd param is pointer to SynchRec }
|
||||
writeMicroMem = $0008; {SendInfo - 2nd param is pointer to MicroControlMemRec }
|
||||
resetSys = $0010; {SendInfo - command }
|
||||
keyCode = $0011; {SendInfo - 2nd param is pointer to key code byte. }
|
||||
resetADB = $0040; {SendInfo - command }
|
||||
transmitADBBytes = $0047; {SendInfo - add number of bytes to this }
|
||||
enableSRQ = $0050; {SendInfo - command - ADB address in low nibble }
|
||||
flushADBDevBuf = $0060; {SendInfo - command - ADB address in low nibble }
|
||||
disableSRQ = $0070; {SendInfo - command - ADB address in low nibble }
|
||||
transmit2ADBBytes = $0080; {SendInfo - add ADB address to this }
|
||||
listen = $0080; {SendInfo - adbCommand = listen + ( 16 * reg) + (adb address) }
|
||||
talk = $00C0; {SendInfo - adbCommand = talk + ( 16 * reg) + (adb address) }
|
||||
|
||||
TYPE
|
||||
ReadConfigRecPtr = ^ReadConfigRec;
|
||||
ReadConfigRec = PACKED RECORD
|
||||
rcRepeatDelay : Byte; { Output Byte: Repeat / Delay }
|
||||
rcLayoutOrLang : Byte; { Output Byte: Layout / Language }
|
||||
rcADBAddr : Byte; { Output Byte: ADB address - keyboard and mouse }
|
||||
END;
|
||||
SetConfigRecPtr = ^SetConfigRec;
|
||||
SetConfigRec = PACKED RECORD
|
||||
scADBAddr : Byte; { keyboard and mouse }
|
||||
scLayoutOrLang : Byte;
|
||||
scRepeatDelay : Byte;
|
||||
END;
|
||||
SynchRecPtr = ^SynchRec;
|
||||
SynchRec = PACKED RECORD
|
||||
synchMode : Byte;
|
||||
synchKybdMouseAddr : Byte;
|
||||
synchLayoutOrLang : Byte;
|
||||
synchRepeatDelay : Byte;
|
||||
END;
|
||||
ScaleRecPtr = ^ScaleRec;
|
||||
ScaleRec = RECORD
|
||||
xDivide : Integer;
|
||||
yDivide : Integer;
|
||||
xOffset : Integer;
|
||||
yOffset : Integer;
|
||||
xMultiply : Integer;
|
||||
yMultiply : Integer;
|
||||
END;
|
||||
PROCEDURE ADBBootInit ; Tool $09,$01;
|
||||
PROCEDURE ADBStartUp ; Tool $09,$02;
|
||||
PROCEDURE ADBShutDown ; Tool $09,$03;
|
||||
FUNCTION ADBVersion : Integer ; Tool $09,$04;
|
||||
PROCEDURE ADBReset ; Tool $09,$05;
|
||||
FUNCTION ADBStatus : Boolean ; Tool $09,$06;
|
||||
PROCEDURE AbsOff ; Tool $09,$10;
|
||||
PROCEDURE AbsOn ; Tool $09,$0F;
|
||||
PROCEDURE AsyncADBReceive ( compPtr:Ptr) ; Tool $09,$0D;
|
||||
PROCEDURE ClearSRQTable ; Tool $09,$16;
|
||||
PROCEDURE GetAbsScale (VAR dataInPtr:ScaleRec) ; Tool $09,$13;
|
||||
FUNCTION ReadAbs : Integer ; Tool $09,$11;
|
||||
PROCEDURE ReadKeyMicroData ( dataLength:Integer; dataPtr:Ptr;
|
||||
adbCommand:Integer) ; Tool $09,$0A;
|
||||
PROCEDURE ReadKeyMicroMem ( dataLength:Integer; dataPtr:Ptr;
|
||||
adbCommand:Integer) ; Tool $09,$0B;
|
||||
PROCEDURE SendInfo ( dataLength:Integer; dataPtr:Ptr; adbCommand:Integer) ;
|
||||
Tool $09,$09;
|
||||
PROCEDURE SetAbsScale ( dataOutPtr:ScaleRec) ; Tool $09,$12;
|
||||
PROCEDURE SRQPoll ( compPtr:Ptr; adbRegAddr:Integer) ; Tool $09,$14;
|
||||
PROCEDURE SRQRemove ( adbRegAddr:Integer) ; Tool $09,$15;
|
||||
PROCEDURE SyncADBReceive ( inputWord:Integer; compPtr:Ptr; adbCommand:Integer)
|
||||
; Tool $09,$0E;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,166 @@
|
|||
{********************************************
|
||||
; File: AppleShareFST.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT APPLESHAREFST;
|
||||
INTERFACE
|
||||
USES TYPES,GSOS;
|
||||
CONST
|
||||
|
||||
ASBufferControl = $0001; {Command Number - }
|
||||
ASByteRangeLock = $0002; {Command Number - }
|
||||
ASSpecialOpenFork = $0003; {Command Number - }
|
||||
ASGetPrivileges = $0004; {Command Number - }
|
||||
ASSetPrivileges = $0005; {Command Number - }
|
||||
ASUserInfo = $0006; {Command Number - }
|
||||
ASCopyFile = $0007; {Command Number - }
|
||||
ASGetUserPath = $0008; {Command Number - }
|
||||
ASOpenDesktop = $0009; {Command Number - }
|
||||
ASCloseDesktop = $000A; {Command Number - }
|
||||
ASGetComment = $000B; {Command Number - }
|
||||
ASSetComment = $000C; {Command Number - }
|
||||
ASGetServerName = $000D; {Command Number - }
|
||||
appleShareNetError = $0088; {Error - AppleShare Network Error }
|
||||
unknownUser = $007E; {Error - specified user name not registered }
|
||||
unknownGroup = $007F; {Error - specified group name not the name of a group }
|
||||
lockRange = $8000; {Mask - }
|
||||
relativeToEOF = $4000; {Mask - }
|
||||
seeFolders = $00; {Mask - }
|
||||
seeFiles = $02; {Mask - }
|
||||
makeChanges = $0004; {Mask - }
|
||||
folderOwner = $80; {Mask - }
|
||||
onDesktop = $0001; {File Info Mask - }
|
||||
bFOwnAppl = $0002; {File Info Mask - used internally }
|
||||
bFNever = $0010; {File Info Mask - never SwitchLaunch }
|
||||
bFAlways = $0020; {File Info Mask - always SwitchLaunch }
|
||||
shareApplication = $0040; {File Info Mask - set if file is a shareable
|
||||
application }
|
||||
fileIsInited = $0100; {File Info Mask - seen by Finder }
|
||||
fileHasChanged = $0200; {File Info Mask - used internally by Finder }
|
||||
fileIsBusy = $0400; {File Info Mask - copied from File System busy bit }
|
||||
fileNoCopy = $0800; {File Info Mask - not used in 5.0 and later, formally BOZO
|
||||
}
|
||||
fileIsSystem = $1000; {File Info Mask - set if file is a system file }
|
||||
fileHasBundle = $2000; {File Info Mask - }
|
||||
fileIsInvisible = $4000; {File Info Mask - }
|
||||
fileIsLocked = $8000; {File Info Mask - }
|
||||
inTrashWindow = $FFFD; {Window Info Mask - }
|
||||
inDesktopWindow = $FFFE; {Window Info Mask - }
|
||||
inDiskWindow = $0000; {Window Info Mask - }
|
||||
requestReadAccess = $0000; {accessWord Mask - }
|
||||
requestWriteAccess = $0002; {accessWord Mask - }
|
||||
denyReadAccess = $0010; {accessWord Mask - }
|
||||
denyWriteAccess = $0020; {accessWord Mask - }
|
||||
dataForkNum = $0000; {forkNum Mask - }
|
||||
resourceForkNum = $0001; {forkNum Mask - }
|
||||
|
||||
TYPE
|
||||
CommandBlock = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
commandNum : Integer;
|
||||
END;
|
||||
BufferControlRecPtr = ^BufferControlRec;
|
||||
BufferControlRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
refNum : Integer;
|
||||
flags : Integer;
|
||||
END;
|
||||
SpecialOpenForkRecPtr = ^SpecialOpenForkRec;
|
||||
SpecialOpenForkRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
pathname : GSString255Ptr;
|
||||
accessMode : Integer;
|
||||
forkNum : Integer;
|
||||
END;
|
||||
ByteRangeLockRecPtr = ^ByteRangeLockRec;
|
||||
ByteRangeLockRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
referenceNum : Integer;
|
||||
lockFlag : Integer;
|
||||
fileOffset : Longint;
|
||||
rangeLength : Longint;
|
||||
rangeStart : Longint;
|
||||
END;
|
||||
GetAccessRightsRecPtr = ^GetAccessRightsRec;
|
||||
GetAccessRightsRec = PACKED RECORD
|
||||
reserved : Byte;
|
||||
world : Byte;
|
||||
group : Byte;
|
||||
owner : Byte;
|
||||
END;
|
||||
GetPrivilegesRecPtr = ^GetPrivilegesRec;
|
||||
GetPrivilegesRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
pathname : GSString255Ptr;
|
||||
accessRights : GetAccessRightsRec;
|
||||
ownerName : ResultBuf255Ptr;
|
||||
groupName : ResultBuf255Ptr;
|
||||
END;
|
||||
SetAccessRightsRecPtr = ^SetAccessRightsRec;
|
||||
SetAccessRightsRec = PACKED RECORD
|
||||
userSummary : Byte;
|
||||
world : Byte;
|
||||
group : Byte;
|
||||
owner : Byte;
|
||||
END;
|
||||
SetPrivilegesRecPtr = ^SetPrivilegesRec;
|
||||
SetPrivilegesRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
pathname : GSString255Ptr;
|
||||
accessRights : SetAccessRightsRec;
|
||||
ownerName : ResultBuf255Ptr;
|
||||
groupName : ResultBuf255Ptr;
|
||||
END;
|
||||
UserInfoRecPtr = ^UserInfoRec;
|
||||
UserInfoRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
deviceNum : Integer;
|
||||
userName : ResultBuf255Ptr;
|
||||
primaryGroupName : ResultBuf255Ptr;
|
||||
END;
|
||||
CopyFileRecPtr = ^CopyFileRec;
|
||||
CopyFileRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
sourcePathname : GSString255Ptr;
|
||||
destPathname : GSString255Ptr;
|
||||
END;
|
||||
GetUserPathRecPtr = ^GetUserPathRec;
|
||||
GetUserPathRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
prefix : ResultBuf255Ptr;
|
||||
END;
|
||||
DesktopRecPtr = ^DesktopRec;
|
||||
DesktopRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
desktopRefNum : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
END;
|
||||
GetCommentRecPtr = ^GetCommentRec;
|
||||
GetCommentRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
desktopRefNum : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
comment : ResultBuf255Ptr;
|
||||
END;
|
||||
SetCommentRecPtr = ^SetCommentRec;
|
||||
SetCommentRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
desktopRefNum : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
comment : GSString255Ptr;
|
||||
END;
|
||||
GetServerNameRecPtr = ^GetServerNameRec;
|
||||
GetServerNameRec = RECORD
|
||||
pBlock : CommandBlock;
|
||||
pathname : GSString255Ptr;
|
||||
serverName : ResultBuf255Ptr;
|
||||
zoneName : ResultBuf255Ptr;
|
||||
END;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,274 @@
|
|||
{********************************************
|
||||
; File: Controls.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT CONTROLS;
|
||||
INTERFACE
|
||||
USES TYPES,QUICKDRAW,EVENTS;
|
||||
CONST
|
||||
|
||||
wmNotStartedUp = $1001; {error - Window manager was not started first. }
|
||||
noConstraint = $0000; {Axis Parameter - No constraint on movement. }
|
||||
hAxisOnly = $0001; {Axis Parameter - Horizontal axis only. }
|
||||
vAxisOnly = $0002; {Axis Parameter - Vertical axis only. }
|
||||
simpRound = $0000; {CtlFlag - Simple button flag }
|
||||
upFlag = $0001; {CtlFlag - Scroll bar flag. }
|
||||
boldButton = $0001; {CtlFlag - Bold round cornered outlined button. }
|
||||
simpBRound = $0001; {CtlFlag - Simple button flag }
|
||||
downFlag = $0002; {CtlFlag - Scroll bar flag. }
|
||||
simpSquare = $0002; {CtlFlag - Simple button flag }
|
||||
simpDropSquare = $0003; {CtlFlag - Simple button flag }
|
||||
leftFlag = $0004; {CtlFlag - Scroll bar flag. }
|
||||
rightFlag = $0008; {CtlFlag - Scroll bar flag. }
|
||||
dirScroll = $0010; {CtlFlag - Scroll bar flag. }
|
||||
horScroll = $0010; {CtlFlag - Scroll bar flag. }
|
||||
family = $007F; {CtlFlag - Mask for radio button family number }
|
||||
ctlInVis = $0080; {CtlFlag - invisible mask for any type of control }
|
||||
inListBox = $88; {CtlFlag - }
|
||||
simpleProc = $00000000; {CtlProc - }
|
||||
checkProc = $02000000; {CtlProc - }
|
||||
radioProc = $04000000; {CtlProc - }
|
||||
scrollProc = $06000000; {CtlProc - }
|
||||
growProc = $08000000; {CtlProc - }
|
||||
drawCtl = $0000; {DefProc - Draw control command. }
|
||||
calcCRect = $0001; {DefProc - Compute drag RECT command. }
|
||||
testCtl = $0002; {DefProc - Hit test command. }
|
||||
initCtl = $0003; {DefProc - Initialize command. }
|
||||
dispCtl = $0004; {DefProc - Dispose command. }
|
||||
posCtl = $0005; {DefProc - Move indicator command. }
|
||||
thumbCtl = $0006; {DefProc - Compute drag parameters command. }
|
||||
dragCtl = $0007; {DefProc - Drag command. }
|
||||
autoTrack = $0008; {DefProc - Action command. }
|
||||
newValue = $0009; {DefProc - Set new value command. }
|
||||
setParams = $000A; {DefProc - Set new parameters command. }
|
||||
moveCtl = $000B; {DefProc - Move command. }
|
||||
recSize = $000C; {DefProc - Return record size command. }
|
||||
noHilite = $0000; {hiliteState - Param to HiliteControl }
|
||||
inactiveHilite = $00FF; {hiliteState - Param to HiliteControl }
|
||||
noPart = $0000; {PartCode - }
|
||||
simpleButton = $0002; {PartCode - }
|
||||
checkBox = $0003; {PartCode - }
|
||||
radioButton = $0004; {PartCode - }
|
||||
upArrow = $0005; {PartCode - }
|
||||
downArrow = $0006; {PartCode - }
|
||||
pageUp = $0007; {PartCode - }
|
||||
pageDown = $0008; {PartCode - }
|
||||
growBox = $000A; {PartCode - }
|
||||
thumb = $0081; {PartCode - }
|
||||
fCtlTarget = $8000; {CtlRec.ctlMoreFlags - is current target of typing commands
|
||||
}
|
||||
fCtlCanBeTarget = $4000; {CtlRec.ctlMoreFlags - can be made the target control
|
||||
}
|
||||
fCtlWantEvents = $2000; {CtlRec.ctlMoreFlags - control can be called view
|
||||
SendEventToCtl }
|
||||
fCtlProcRefNotPtr = $1000; {CtlRec.ctlMoreFlags - set = ID of defproc, clear =
|
||||
pointer to defproc }
|
||||
fCtlTellAboutSize = $0800; {CtlRec.ctlMoreFlags - set if ctl needs notification
|
||||
when size of owning window changes }
|
||||
fCtlIsMultiPar = $0400; {CtlRec.ctlMoreFlags - set if ctl needs notification to
|
||||
be hidden }
|
||||
titleIsPtr = $00; {Ctl Verb - }
|
||||
titleIsHandle = $01; {Ctl Verb - }
|
||||
titleIsResource = $02; {Ctl Verb - }
|
||||
colorTableIsPtr = $00; {Ctl Verb - }
|
||||
colorTableIsHandle = $04; {Ctl Verb - }
|
||||
colorTableIsResource = $08; {Ctl Verb - }
|
||||
ctlHandleEvent = $0D; {DefProc message - }
|
||||
ctlChangeTarget = $0E; {DefProc message - }
|
||||
ctlChangeBounds = $0F; {DefProc message - }
|
||||
ctlWindChangeSize = $10; {DefProc message - }
|
||||
ctlHandleTab = $11; {DefProc message - }
|
||||
ctlHideCtl = $12; {DefProc message - }
|
||||
singlePtr = $0000; {InputVerb - }
|
||||
singleHandle = $0001; {InputVerb - }
|
||||
singleResource = $0002; {InputVerb - }
|
||||
ptrToPtr = $0003; {InputVerb - }
|
||||
ptrToHandle = $0004; {InputVerb - }
|
||||
ptrToResource = $0005; {InputVerb - }
|
||||
handleToPtr = $0006; {InputVerb - }
|
||||
handleToHandle = $0007; {InputVerb - }
|
||||
handleToResource = $0008; {InputVerb - }
|
||||
resourceToResource = $0009; {InputVerb - }
|
||||
simpleButtonControl = $80000000; {ProcRefs - }
|
||||
checkControl = $82000000; {ProcRefs - }
|
||||
radioControl = $84000000; {ProcRefs - }
|
||||
scrollBarControl = $86000000; {ProcRefs - }
|
||||
growControl = $88000000; {ProcRefs - }
|
||||
statTextControl = $81000000; {ProcRefs - }
|
||||
editLineControl = $83000000; {ProcRefs - }
|
||||
editTextControl = $85000000; {ProcRefs - }
|
||||
popUpControl = $87000000; {ProcRefs - }
|
||||
listControl = $89000000; {ProcRefs - }
|
||||
iconButtonControl = $07FF0001; {ProcRefs - }
|
||||
pictureControl = $8D000000; {ProcRefs - }
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
noCtlError = $1004; {Error - no controls in window }
|
||||
noSuperCtlError = $1005; {Error - no super controls in window }
|
||||
noCtlTargetError = $1006; {Error - no target super control }
|
||||
notSuperCtlError = $1007; {Error - action can only be done on super control }
|
||||
canNotBeTargetError = $1008; {Error - conrol cannot be made target }
|
||||
noSuchIDError = $1009; {Error - specified ID cannot be found }
|
||||
tooFewParmsError = $100A; {Error - not enough params specified }
|
||||
noCtlToBeTargetError = $100B; {Error - NextCtl call, no ctl could be target }
|
||||
noWind_Err = $100C; {Error - there is no front window }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
TYPE
|
||||
WindowPtr = GrafPortPtr ;
|
||||
|
||||
|
||||
BarColorsHndl = ^BarColorsPtr;
|
||||
BarColorsPtr = ^BarColors;
|
||||
BarColors = RECORD
|
||||
barOutline : Integer; { color for outlining bar, arrows, and thumb }
|
||||
barNorArrow : Integer; { color of arrows when not highlighted }
|
||||
barSelArrow : Integer; { color of arrows when highlighted }
|
||||
barArrowBack : Integer; { color of arrow box's background }
|
||||
barNorThumb : Integer; { color of thumb's background when not highlighted }
|
||||
barSelThumb : Integer; { color of thumb's background when highlighted }
|
||||
barPageRgn : Integer; { color and pattern page region: high byte - 1=
|
||||
dither, 0 = solid }
|
||||
barInactive : Integer; { color of scroll bar's interior when inactive }
|
||||
END;
|
||||
BoxColorsHndl = ^BoxColorsPtr;
|
||||
BoxColorsPtr = ^BoxColors;
|
||||
BoxColors = RECORD
|
||||
boxReserved : Integer; { reserved }
|
||||
boxNor : Integer; { color of box when not checked }
|
||||
boxSel : Integer; { color of box when checked }
|
||||
boxTitle : Integer; { color of check box's title }
|
||||
END;
|
||||
BttnColorsHndl = ^BttnColorsPtr;
|
||||
BttnColorsPtr = ^BttnColors;
|
||||
BttnColors = RECORD
|
||||
bttnOutline : Integer; { color of outline }
|
||||
bttnNorBack : Integer; { color of background when not selected }
|
||||
bttnSelBack : Integer; { color of background when selected }
|
||||
bttnNorText : Integer; { color of title's text when not selected }
|
||||
bttnSelText : Integer; { color of title's text when selected }
|
||||
END;
|
||||
CtlRecHndlPtr = ^CtlRecHndl;
|
||||
CtlRecHndl = ^CtlRecPtr;
|
||||
CtlRecPtr = ^CtlRec;
|
||||
CtlRec = PACKED RECORD
|
||||
ctlNext : CtlRecHndl; { Handle of next control. }
|
||||
ctlOwner : WindowPtr; { Pointer to control's window. }
|
||||
ctlRect : Rect; { Enclosing rectangle. }
|
||||
ctlFlag : Byte; { Bit flags. }
|
||||
ctlHilite : Byte; { Highlighted part. }
|
||||
ctlValue : Integer; { Control's value. }
|
||||
ctlProc : LongProcPtr; { Control's definition procedure. }
|
||||
ctlAction : LongProcPtr; { Control's action procedure. }
|
||||
ctlData : Longint; { Reserved for CtrlProc's use. }
|
||||
ctlRefCon : Longint; { Reserved for application's use. }
|
||||
ctlColor : Ptr; { Pointer to appropriate color table. }
|
||||
ctlReserved : PACKED ARRAY[1..16] OF Byte; { Reserved for future expansion
|
||||
}
|
||||
ctlID : Longint;
|
||||
ctlMoreFlags : Integer;
|
||||
ctlVersion : Integer;
|
||||
END;
|
||||
LimitBlkHndl = ^LimitBlkPtr;
|
||||
LimitBlkPtr = ^LimitBlk;
|
||||
LimitBlk = RECORD
|
||||
boundRect : Rect; { Drag bounds. }
|
||||
slopRect : Rect; { Cursor bounds. }
|
||||
axisParam : Integer; { Movement constrains. }
|
||||
dragPatt : Ptr; { Pointer to 32 byte Pattern for drag outline. }
|
||||
END;
|
||||
RadioColorsHndl = ^RadioColorsPtr;
|
||||
RadioColorsPtr = ^RadioColors;
|
||||
RadioColors = RECORD
|
||||
radReserved : Integer; { reserved }
|
||||
radNor : Integer; { color of radio button when off }
|
||||
radSel : Integer; { color of radio button when on }
|
||||
radTitle : Integer; { color of radio button's title text }
|
||||
END;
|
||||
PROCEDURE CtlBootInit ; Tool $10,$01;
|
||||
PROCEDURE CtlStartUp ( userID:Integer; dPageAddr:Integer) ; Tool $10,$02;
|
||||
PROCEDURE CtlShutDown ; Tool $10,$03;
|
||||
FUNCTION CtlVersion : Integer ; Tool $10,$04;
|
||||
PROCEDURE CtlReset ; Tool $10,$05;
|
||||
FUNCTION CtlStatus : Boolean ; Tool $10,$06;
|
||||
PROCEDURE CtlNewRes ; Tool $10,$12;
|
||||
PROCEDURE DisposeControl ( theControlHandle:CtlRecHndl) ; Tool $10,$0A;
|
||||
PROCEDURE DragControl ( startX:Integer; startY:Integer; limitRectPtr:Rect;
|
||||
slopRectPtr:Rect; dragFlag:Integer; theControlHandle:CtlRecHndl) ; Tool
|
||||
$10,$17;
|
||||
FUNCTION DragRect ( actionProcPtr:VoidProcPtr; dragPatternPtr:Pattern;
|
||||
startX:Integer; startY:Integer; dragRectPtr:Rect; limitRectPtr:Rect;
|
||||
slopRectPtr:Rect; dragFlag:Integer) : Longint ; Tool $10,$1D;
|
||||
PROCEDURE DrawControls ( theWindowPtr:WindowPtr) ; Tool $10,$10;
|
||||
PROCEDURE DrawOneCtl ( theControlHandle:CtlRecHndl) ; Tool $10,$25;
|
||||
PROCEDURE EraseControl ( theControlHandle:CtlRecHndl) ; Tool $10,$24;
|
||||
FUNCTION FindControl (VAR foundCtl:CtlRecHndl; pointX:Integer; pointY:Integer;
|
||||
theWindowPtr:WindowPtr) : Integer ; Tool $10,$13;
|
||||
FUNCTION GetCtlAction ( theControlHandle:CtlRecHndl) : LongProcPtr ; Tool
|
||||
$10,$21;
|
||||
FUNCTION GetCtlDPage : Integer ; Tool $10,$1F;
|
||||
FUNCTION GetCtlParams ( theControlHandle:CtlRecHndl) : Longint ; Tool $10,$1C;
|
||||
FUNCTION GetCtlRefCon ( theControlHandle:CtlRecHndl) : Longint ; Tool $10,$23;
|
||||
FUNCTION GetCtlTitle ( theControlHandle:CtlRecHndl) : Ptr ; Tool $10,$0D;
|
||||
FUNCTION GetCtlValue ( theControlHandle:CtlRecHndl) : Integer ; Tool $10,$1A;
|
||||
FUNCTION GrowSize : Longint ; Tool $10,$1E;
|
||||
PROCEDURE HideControl ( theControlHandle:CtlRecHndl) ; Tool $10,$0E;
|
||||
PROCEDURE HiliteControl ( hiliteState:Integer; theControlHandle:CtlRecHndl) ;
|
||||
Tool $10,$11;
|
||||
PROCEDURE KillControls ( theWindowPtr:WindowPtr) ; Tool $10,$0B;
|
||||
PROCEDURE MoveControl ( newX:Integer; newY:Integer;
|
||||
theControlHandle:CtlRecHndl) ; Tool $10,$16;
|
||||
FUNCTION NewControl ( theWindowPtr:WindowPtr; boundsRectPtr:Rect; titlePtr:Ptr;
|
||||
flag:Integer; value :Integer; param1:Integer; param2:Integer;
|
||||
defProcPtr:LongProcPtr; refCon:Longint; U__colorTablePtr:Ptr) : CtlRecHndl ;
|
||||
Tool $10,$09;
|
||||
PROCEDURE SetCtlAction ( newActionPtr:LongProcPtr; theControlHandle:CtlRecHndl)
|
||||
; Tool $10,$20;
|
||||
FUNCTION SetCtlIcons ( newFontHandle:FontHndl) : FontHndl ; Tool $10,$18;
|
||||
PROCEDURE SetCtlParams ( param2:Integer; param1:Integer;
|
||||
theControlHandle:CtlRecHndl) ; Tool $10,$1B;
|
||||
PROCEDURE SetCtlRefCon ( newRefCon:Longint; theControlHandle:CtlRecHndl) ;
|
||||
Tool $10,$22;
|
||||
PROCEDURE SetCtlTitle ( title:Str255; theControlHandle:CtlRecHndl) ; Tool
|
||||
$10,$0C;
|
||||
PROCEDURE SetCtlValue ( curValue:Integer; theControlHandle:CtlRecHndl) ; Tool
|
||||
$10,$19;
|
||||
PROCEDURE ShowControl ( theControlHandle:CtlRecHndl) ; Tool $10,$0F;
|
||||
FUNCTION TestControl ( pointX:Integer; pointY:Integer;
|
||||
theControlHandle:CtlRecHndl) : Integer ; Tool $10,$14;
|
||||
FUNCTION TrackControl ( startX:Integer; startY:Integer;
|
||||
actionProcPtr:LongProcPtr; theControlHndl:CtlRecHndl) : Integer ; Tool $10,$15;
|
||||
FUNCTION NewControl2 ( ownerPtr:WindowPtr; inputDesc:RefDescriptor;
|
||||
inputRef:Ref) : CtlRecHndl ; Tool $10,$31;
|
||||
FUNCTION FindTargetCtl : CtlRecHndl ; Tool $10,$26;
|
||||
FUNCTION MakeNextCtlTarget : CtlRecHndl ; Tool $10,$27;
|
||||
PROCEDURE MakeThisCtlTarget ( targetCtlRecHndl:CtlRecHndl) ; Tool $10,$28;
|
||||
PROCEDURE CallCtlDefProc ( U__ctlRecHndl:CtlRecHndl; defProcMessage:Integer;
|
||||
U__param:Longint) ; Tool $10,$2C;
|
||||
PROCEDURE NotifyControls ( U__mask:Integer; message:Integer; U__param:Longint;
|
||||
window:WindowPtr) ; Tool $10,$2D;
|
||||
FUNCTION SendEventToCtl ( targetOnlyFlag:Integer; U__WindowPtr:WindowPtr;
|
||||
extendedTaskRecPtr:Ptr) : Boolean ; Tool $10,$29;
|
||||
FUNCTION GetCtlID ( theCtlHandle:CtlRecHndl) : Longint ; Tool $10,$2A;
|
||||
PROCEDURE SetCtlID ( newID:Longint; theCtlHandle:CtlRecHndl) ; Tool $10,$2B;
|
||||
FUNCTION GetCtlMoreFlags ( theCtlHandle:CtlRecHndl) : Longint ; Tool $10,$2E;
|
||||
FUNCTION SetCtlMoreFlags ( newID:Longint; theCtlHandle:CtlRecHndl) : Longint ;
|
||||
Tool $10,$2F;
|
||||
FUNCTION GetCtlHandleFromID ( U__WindowPtr:WindowPtr; ControlID:Longint) :
|
||||
CtlRecHndl ; Tool $10,$30;
|
||||
PROCEDURE SetCtlParamPtr ( SubArrayPtr:Ptr) ; Tool $10,$34;
|
||||
FUNCTION GetCtlParamPtr : Ptr ; Tool $10,$35;
|
||||
FUNCTION CMLoadResource ( U__ResType:Integer; U__ResID:Longint) : Handle ; Tool
|
||||
$10,$32;
|
||||
PROCEDURE CMReleaseResource ( U__ResType:Integer; U__ResID:Longint) ; Tool
|
||||
$10,$33;
|
||||
PROCEDURE InvalCtls ( U__WindowPtr:Longint) ; Tool $10,$37;
|
||||
PROCEDURE NotifyCtls ( moreFlagsMask:Integer; message:Integer; param:Longint;
|
||||
theGrafPortPtr:GrafPort) ; Tool $10,$2D;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,38 @@
|
|||
UNIT CTIUtils;
|
||||
|
||||
INTERFACE
|
||||
|
||||
USES
|
||||
|
||||
FUNCTION Int2String
|
||||
|
||||
FUNCTION LongInt2String
|
||||
|
||||
FUNCTION Real2String
|
||||
|
||||
|
||||
FUNCTION String2Int
|
||||
|
||||
FUNCTION String2LongInt
|
||||
|
||||
FUNCTION String2Real
|
||||
|
||||
|
||||
procedure P2GSstring
|
||||
|
||||
|
||||
procedure GS2Pstring
|
||||
|
||||
|
||||
|
||||
PROCEDURE StuffHex
|
||||
|
||||
|
||||
PROCEDURE CallCode
|
||||
|
||||
nBytesIn: integer; BytesIn: univ ptr;
|
||||
nBytesOut: integer; BytesOut: univ ptr );
|
||||
|
||||
IMPLEMENTATION
|
||||
|
||||
END.
|
|
@ -0,0 +1,67 @@
|
|||
{********************************************
|
||||
; File: Desk.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT DESK;
|
||||
INTERFACE
|
||||
USES TYPES,QUICKDRAW,EVENTS;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
daNotFound = $0510; {error - desk accessory not found }
|
||||
notSysWindow = $0511; {error - not the system window }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
eventAction = $0001; {NDA action code - }
|
||||
runAction = $0002; {NDA action code - }
|
||||
undoAction = $0005; {NDA action code - }
|
||||
cutAction = $0006; {NDA action code - }
|
||||
copyAction = $0007; {NDA action code - }
|
||||
pasteAction = $0008; {NDA action code - }
|
||||
clearAction = $0009; {NDA action code - }
|
||||
cursorAction = $0003; {NDAaction code - }
|
||||
kUndo = $0001; {System Edit - edit type }
|
||||
kCut = $0002; {System Edit - edit type }
|
||||
kCopy = $0003; {System Edit - edit type }
|
||||
kPaste = $0004; {System Edit - edit type }
|
||||
kClear = $0005; {System Edit - edit type }
|
||||
PROCEDURE DeskBootInit ; Tool $05,$01;
|
||||
PROCEDURE DeskStartUp ; Tool $05,$02;
|
||||
PROCEDURE DeskShutDown ; Tool $05,$03;
|
||||
FUNCTION DeskVersion : Integer ; Tool $05,$04;
|
||||
PROCEDURE DeskReset ; Tool $05,$05;
|
||||
FUNCTION DeskStatus : Boolean ; Tool $05,$06;
|
||||
PROCEDURE ChooseCDA ; Tool $05,$11;
|
||||
PROCEDURE CloseAllNDAs ; Tool $05,$1D;
|
||||
PROCEDURE CloseNDA ( refNum:Integer) ; Tool $05,$16;
|
||||
PROCEDURE CloseNDAByWinPtr ( theWindowPtr:GrafPortPtr) ; Tool $05,$1C;
|
||||
PROCEDURE FixAppleMenu ( startingID:Integer) ; Tool $05,$1E;
|
||||
FUNCTION GetDAStrPtr : Ptr ; Tool $05,$14;
|
||||
FUNCTION GetNumNDAs : Integer ; Tool $05,$1B;
|
||||
PROCEDURE InstallCDA ( idHandle:Handle) ; Tool $05,$0F;
|
||||
PROCEDURE InstallNDA ( idHandle:Handle) ; Tool $05,$0E;
|
||||
FUNCTION OpenNDA ( idNum:Integer) : Integer ; Tool $05,$15;
|
||||
PROCEDURE RestAll ; Tool $05,$0C;
|
||||
PROCEDURE RestScrn ; Tool $05,$0A;
|
||||
PROCEDURE SaveAll ; Tool $05,$0B;
|
||||
PROCEDURE SaveScrn ; Tool $05,$09;
|
||||
PROCEDURE SetDAStrPtr ( altDispHandle:Handle; stringTablePtr:Ptr) ; Tool
|
||||
$05,$13;
|
||||
PROCEDURE SystemClick ( eventRecPtr:EventRecord; theWindowPtr:GrafPortPtr;
|
||||
findWndwResult:Integer) ; Tool $05,$17;
|
||||
FUNCTION SystemEdit ( editType:Integer) : Boolean ; Tool $05,$18;
|
||||
FUNCTION SystemEvent ( eventWhat:Integer; eventMessage:Longint;
|
||||
eventWhen:Longint; eventWhere:Point; eventMods:Integer) : Boolean ; Tool
|
||||
$05,$1A;
|
||||
PROCEDURE SystemTask ; Tool $05,$19;
|
||||
PROCEDURE AddToRunQ ( headerPtr:Ptr) ; Tool $05,$1F;
|
||||
PROCEDURE RemoveFromRunQ ( headerPtr:Ptr) ; Tool $05,$20;
|
||||
PROCEDURE RemoveCDA ( idHandle:Handle) ; Tool $05,$21;
|
||||
PROCEDURE RemoveNDA ( idHandle:Handle) ; Tool $05,$22;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,205 @@
|
|||
{********************************************
|
||||
; File: Dialogs.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT DIALOGS;
|
||||
INTERFACE
|
||||
USES TYPES,QUICKDRAW,EVENTS,CONTROLS,WINDOWS,LINEEDIT;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
badItemType = $150A; {error - }
|
||||
newItemFailed = $150B; {error - }
|
||||
itemNotFound = $150C; {error - }
|
||||
notModalDialog = $150D; {error - }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
getInitView = $0001; {Command - }
|
||||
getInitTotal = $0002; {Command - }
|
||||
getInitValue = $0003; {Command - }
|
||||
scrollLineUp = $0004; {Command - }
|
||||
scrollLineDown = $0005; {Command - }
|
||||
scrollPageUp = $0006; {Command - }
|
||||
scrollPageDown = $0007; {Command - }
|
||||
scrollThumb = $0008; {Command - }
|
||||
buttonItem = $000A; {Item Type - }
|
||||
checkItem = $000B; {Item Type - }
|
||||
radioItem = $000C; {Item Type - }
|
||||
scrollBarItem = $000D; {Item Type - }
|
||||
userCtlItem = $000E; {Item Type - }
|
||||
statText = $000F; {Item Type - }
|
||||
longStatText = $0010; {Item Type - }
|
||||
editLine = $0011; {Item Type - }
|
||||
iconItem = $0012; {Item Type - }
|
||||
picItem = $0013; {Item Type - }
|
||||
userItem = $0014; {Item Type - }
|
||||
userCtlItem2 = $0015; {Item Type - }
|
||||
longStatText2 = $0016; {Item Type - }
|
||||
itemDisable = $8000; {Item Type - }
|
||||
minItemType = $000A; {Item Type Range - }
|
||||
maxItemType = $0016; {Item Type Range - }
|
||||
ok = $0001; {ItemID - }
|
||||
cancel = $0002; {ItemID - }
|
||||
inButton = $0002; {ModalDialog2 - Part code }
|
||||
inCheckBox = $0003; {ModalDialog2 - Part code }
|
||||
inRadioButton = $0004; {ModalDialog2 - Part code }
|
||||
inUpArrow = $0005; {ModalDialog2 - Part code }
|
||||
inDownArrow = $0006; {ModalDialog2 - Part code }
|
||||
inPageUp = $0007; {ModalDialog2 - Part code }
|
||||
inPageDown = $0008; {ModalDialog2 - Part code }
|
||||
inStatText = $0009; {ModalDialog2 - Part code }
|
||||
inGrow = $000A; {ModalDialog2 - Part code }
|
||||
inEditLine = $000B; {ModalDialog2 - Part code }
|
||||
inUserItem = $000C; {ModalDialog2 - Part code }
|
||||
inLongStatText = $000D; {ModalDialog2 - Part code }
|
||||
inIconItem = $000E; {ModalDialog2 - Part code }
|
||||
inLongStatText2 = $000F; {ModalDialog2 - }
|
||||
inThumb = $0081; {ModalDialog2 - Part code }
|
||||
okDefault = $0000; {Stage Bit Vector - }
|
||||
cancelDefault = $0040; {Stage Bit Vector - }
|
||||
alertDrawn = $0080; {Stage Bit Vector - }
|
||||
|
||||
atItemListLength = $0005;
|
||||
|
||||
dtItemListLength = $0008;
|
||||
|
||||
TYPE
|
||||
DialogPtr = WindowPtr ;
|
||||
ItemTempHndl = ^ItemTempPtr;
|
||||
ItemTempPtr = ^ItemTemplate;
|
||||
ItemTemplate = RECORD
|
||||
itemID : Integer;
|
||||
itemRect : Rect;
|
||||
itemType : Integer;
|
||||
itemDescr : Ptr;
|
||||
itemValue : Integer;
|
||||
itemFlag : Integer;
|
||||
itemColor : Ptr; { pointer to appropriate type of color table }
|
||||
END;
|
||||
AlertTempHndl = ^AlertTempPtr;
|
||||
AlertTempPtr = ^AlertTemplate;
|
||||
AlertTemplate = RECORD
|
||||
atBoundsRect : Rect;
|
||||
atAlertID : Integer;
|
||||
atStage1 : Byte;
|
||||
atStage2 : Byte;
|
||||
atStage3 : Byte;
|
||||
atStage4 : Byte;
|
||||
atItemList : ARRAY[1..atItemListLength] OF ItemTempPtr; { Null terminated
|
||||
array }
|
||||
END;
|
||||
DlgTempHndl = ^DlgTempPtr;
|
||||
DlgTempPtr = ^DialogTemplate;
|
||||
DialogTemplate = RECORD
|
||||
dtBoundsRect : Rect;
|
||||
dtVisible : Boolean;
|
||||
dtRefCon : Longint;
|
||||
dtItemList : ARRAY[1..dtItemListLength] OF ItemTempPtr; { Null terminated
|
||||
array }
|
||||
END;
|
||||
IconRecordHndl = ^IconRecordPtr;
|
||||
IconRecordPtr = ^IconRecord;
|
||||
IconRecord = RECORD
|
||||
iconRect : Rect;
|
||||
iconImage : PACKED ARRAY[1..1] OF Byte;
|
||||
END;
|
||||
UserCtlItemPBHndl = ^UserCtlItemPBPtr;
|
||||
UserCtlItemPBPtr = ^UserCtlItemPB;
|
||||
UserCtlItemPB = RECORD
|
||||
defProcParm : Longint; { ? should this be a LongProcPtr? }
|
||||
titleParm : Ptr;
|
||||
param2 : Integer;
|
||||
param1 : Integer;
|
||||
END;
|
||||
PROCEDURE DialogBootInit ; Tool $15,$01;
|
||||
PROCEDURE DialogStartUp ( userID:Integer) ; Tool $15,$02;
|
||||
PROCEDURE DialogShutDown ; Tool $15,$03;
|
||||
FUNCTION DialogVersion : Integer ; Tool $15,$04;
|
||||
PROCEDURE DialogReset ; Tool $15,$05;
|
||||
FUNCTION DialogStatus : Boolean ; Tool $15,$06;
|
||||
FUNCTION Alert ( alertTemplatePtr:AlertTemplate; filterProcPtr:WordProcPtr) :
|
||||
Integer ; Tool $15,$17;
|
||||
FUNCTION CautionAlert ( alertTemplatePtr:AlertTemplate;
|
||||
filterProcPtr:WordProcPtr) : Integer ; Tool $15,$1A;
|
||||
PROCEDURE CloseDialog ( theDialogPtr:DialogPtr) ; Tool $15,$0C;
|
||||
FUNCTION DefaultFilter ( theDialogPtr:DialogPtr; theEventPtr:EventRecord;
|
||||
itemHitPtr:IntPtr) : Boolean ; Tool $15,$36;
|
||||
FUNCTION DialogSelect ( theEventPtr:EventRecord;VAR resultPtr:WindowPtr;VAR
|
||||
itemHitPtr:Integer) : Boolean ; Tool $15,$11;
|
||||
PROCEDURE DisableDItem ( theDialogPtr:DialogPtr; itemID:Integer) ; Tool
|
||||
$15,$39;
|
||||
PROCEDURE DlgCopy ( theDialogPtr:DialogPtr) ; Tool $15,$13;
|
||||
PROCEDURE DlgCut ( theDialogPtr:DialogPtr) ; Tool $15,$12;
|
||||
PROCEDURE DlgDelete ( theDialogPtr:DialogPtr) ; Tool $15,$15;
|
||||
PROCEDURE DlgPaste ( theDialogPtr:DialogPtr) ; Tool $15,$14;
|
||||
PROCEDURE DrawDialog ( theDialogPtr:DialogPtr) ; Tool $15,$16;
|
||||
PROCEDURE EnableDItem ( theDialogPtr:DialogPtr; itemID:Integer) ; Tool
|
||||
$15,$3A;
|
||||
PROCEDURE ErrorSound ( soundProcPtr:VoidProcPtr) ; Tool $15,$09;
|
||||
FUNCTION FindDItem ( theDialogPtr:DialogPtr; thePoint:Point) : Integer ; Tool
|
||||
$15,$24;
|
||||
FUNCTION GetAlertStage : Integer ; Tool $15,$34;
|
||||
FUNCTION GetControlDItem ( theDialogPtr:DialogPtr; itemID:Integer) : CtlRecHndl
|
||||
; Tool $15,$1E;
|
||||
FUNCTION GetDefButton ( theDialogPtr:DialogPtr) : Integer ; Tool $15,$37;
|
||||
PROCEDURE GetDItemBox ( theDialogPtr:DialogPtr; itemID:Integer;
|
||||
itemBoxPtr:Rect) ; Tool $15,$28;
|
||||
FUNCTION GetDItemType ( theDialogPtr:DialogPtr; itemID:Integer) : Integer ;
|
||||
Tool $15,$26;
|
||||
FUNCTION GetDItemValue ( theDialogPtr:DialogPtr; itemID:Integer) : Integer ;
|
||||
Tool $15,$2E;
|
||||
FUNCTION GetFirstDItem ( theDialogPtr:DialogPtr) : Integer ; Tool $15,$2A;
|
||||
PROCEDURE GetIText ( theDialogPtr:DialogPtr; itemID:Integer;VAR text:Str255) ;
|
||||
Tool $15,$1F;
|
||||
PROCEDURE GetNewDItem ( theDialogPtr:DialogPtr; itemTemplatePtr:ItemTemplate)
|
||||
; Tool $15,$33;
|
||||
FUNCTION GetNewModalDialog ( dialogTemplatePtr:DlgTempPtr) : DialogPtr ; Tool
|
||||
$15,$32;
|
||||
FUNCTION GetNextDItem ( theDialogPtr:DialogPtr; itemID:Integer) : Integer ;
|
||||
Tool $15,$2B;
|
||||
PROCEDURE HideDItem ( theDialogPtr:DialogPtr; itemID:Integer) ; Tool $15,$22;
|
||||
FUNCTION IsDialogEvent ( theEventPtr:EventRecord) : Boolean ; Tool $15,$10;
|
||||
FUNCTION ModalDialog ( filterProcPtr:WordProcPtr) : Integer ; Tool $15,$0F;
|
||||
FUNCTION ModalDialog2 ( filterProcPtr:WordProcPtr) : Longint ; Tool $15,$2C;
|
||||
PROCEDURE NewDItem ( theDialogPtr:DialogPtr; itemID:Integer; itemRectPtr:Rect;
|
||||
itemType:Integer; itemDescr:Ptr; itemValue:Integer; itemFlag:Integer;
|
||||
itemColorPtr:Ptr) ; Tool $15,$0D;
|
||||
FUNCTION NewModalDialog ( dBoundsRectPtr:Rect; dVisibleFlag:Boolean;
|
||||
dRefCon:Longint) : DialogPtr ; Tool $15,$0A;
|
||||
FUNCTION NewModelessDialog ( dBoundsRectPtr:Rect; dTitle:Str255;
|
||||
dBehindPtr:DialogPtr; dFlag:Integer; dRefCon:Longint; dFullSizePtr:Rect) :
|
||||
DialogPtr ; Tool $15,$0B;
|
||||
FUNCTION NoteAlert ( alertTemplatePtr:AlertTempPtr; filterProcPtr:WordProcPtr)
|
||||
: Integer ; Tool $15,$19;
|
||||
PROCEDURE ParamText ( param0:Str255; param1:Str255; param2:Str255;
|
||||
param3:Str255) ; Tool $15,$1B;
|
||||
PROCEDURE RemoveDItem ( theDialogPtr:DialogPtr; itemID:Integer) ; Tool
|
||||
$15,$0E;
|
||||
PROCEDURE ResetAlertStage ; Tool $15,$35;
|
||||
PROCEDURE SelIText ( theDialogPtr:DialogPtr; itemID:Integer; startSel:Integer;
|
||||
endSel:Integer) ; Tool $15,$21;
|
||||
PROCEDURE SelectIText ( theDialogPtr:DialogPtr; itemID:Integer;
|
||||
startSel:Integer; endSel:Integer) ; Tool $15,$21;
|
||||
PROCEDURE SetDAFont ( fontHandle:FontHndl) ; Tool $15,$1C;
|
||||
PROCEDURE SetDefButton ( defButtonID:Integer; theDialogPtr:DialogPtr) ; Tool
|
||||
$15,$38;
|
||||
PROCEDURE SetDItemBox ( theDialogPtr:DialogPtr; itemID:Integer;
|
||||
itemBoxPtr:Rect) ; Tool $15,$29;
|
||||
PROCEDURE SetDItemType ( itemType:Integer; theDialogPtr:DialogPtr;
|
||||
itemID:Integer) ; Tool $15,$27;
|
||||
PROCEDURE SetDItemValue ( itemValue:Integer; theDialogPtr:DialogPtr;
|
||||
itemID:Integer) ; Tool $15,$2F;
|
||||
PROCEDURE SetIText ( theDialogPtr:DialogPtr; itemID:Integer; theString:Str255)
|
||||
; Tool $15,$20;
|
||||
PROCEDURE ShowDItem ( theDialogPtr:DialogPtr; itemID:Integer) ; Tool $15,$23;
|
||||
FUNCTION StopAlert ( alertTemplatePtr:AlertTempPtr; filterProcPtr:WordProcPtr)
|
||||
: Integer ; Tool $15,$18;
|
||||
PROCEDURE UpdateDialog ( theDialogPtr:DialogPtr; updateRgnHandle:RgnHandle) ;
|
||||
Tool $15,$25;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,133 @@
|
|||
{********************************************
|
||||
; File: Events.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT EVENTS;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
emDupStrtUpErr = $0601; {error - duplicate EMStartup Call }
|
||||
emResetErr = $0602; {error - can't reset error the Event Manager }
|
||||
emNotActErr = $0603; {error - event manager not active }
|
||||
emBadEvtCodeErr = $0604; {error - illegal event code }
|
||||
emBadBttnNoErr = $0605; {error - illegal button number }
|
||||
emQSiz2LrgErr = $0606; {error - queue size too large }
|
||||
emNoMemQueueErr = $0607; {error - not enough memory for queue }
|
||||
emBadEvtQErr = $0681; {error - fatal sys error - event queue damaged }
|
||||
emBadQHndlErr = $0682; {error - fatal sys error - queue handle damaged }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
nullEvt = $0000; {Event Code - }
|
||||
mouseDownEvt = $0001; {Event Code - }
|
||||
mouseUpEvt = $0002; {Event Code - }
|
||||
keyDownEvt = $0003; {Event Code - }
|
||||
autoKeyEvt = $0005; {Event Code - }
|
||||
updateEvt = $0006; {Event Code - }
|
||||
activateEvt = $0008; {Event Code - }
|
||||
switchEvt = $0009; {Event Code - }
|
||||
deskAccEvt = $000A; {Event Code - }
|
||||
driverEvt = $000B; {Event Code - }
|
||||
app1Evt = $000C; {Event Code - }
|
||||
app2Evt = $000D; {Event Code - }
|
||||
app3Evt = $000E; {Event Code - }
|
||||
app4Evt = $000F; {Event Code - }
|
||||
mDownMask = $0002; {Event Masks - }
|
||||
mUpMask = $0004; {Event Masks - }
|
||||
keyDownMask = $0008; {Event Masks - }
|
||||
autoKeyMask = $0020; {Event Masks - }
|
||||
updateMask = $0040; {Event Masks - }
|
||||
activeMask = $0100; {Event Masks - }
|
||||
switchMask = $0200; {Event Masks - }
|
||||
deskAccMask = $0400; {Event Masks - }
|
||||
driverMask = $0800; {Event Masks - }
|
||||
app1Mask = $1000; {Event Masks - }
|
||||
app2Mask = $2000; {Event Masks - }
|
||||
app3Mask = $4000; {Event Masks - }
|
||||
app4Mask = $8000; {Event Masks - }
|
||||
everyEvent = $FFFF; {Event Masks - }
|
||||
jcTickCount = $00; {Journal Code - TickCount call }
|
||||
jcGetMouse = $01; {Journal Code - GetMouse call }
|
||||
jcButton = $02; {Journal Code - Button call }
|
||||
jcEvent = $04; {Journal Code - GetNextEvent and EventAvail calls }
|
||||
activeFlag = $0001; {Modifier Flags - set if window being activated }
|
||||
changeFlag = $0002; {Modifier Flags - set if active wind. changed state }
|
||||
btn1State = $0040; {Modifier Flags - set if button 1 up }
|
||||
btn0State = $0080; {Modifier Flags - set if button 0 up }
|
||||
appleKey = $0100; {Modifier Flags - set if Apple key down }
|
||||
shiftKey = $0200; {Modifier Flags - set if shift key down }
|
||||
capsLock = $0400; {Modifier Flags - set if caps lock key down }
|
||||
optionKey = $0800; {Modifier Flags - set if option key down }
|
||||
controlKey = $1000; {Modifier Flags - set if Control key down }
|
||||
keyPad = $2000; {Modifier Flags - set if keypress from key pad }
|
||||
|
||||
TYPE
|
||||
EventRecordHndl = ^EventRecordPtr;
|
||||
EventRecordPtr = ^EventRecord;
|
||||
EventRecord = RECORD CASE INTEGER OF
|
||||
0: (
|
||||
what : Integer; { event code }
|
||||
message : Longint; { event message }
|
||||
when : Longint; { ticks since startup }
|
||||
where : Point; { mouse location }
|
||||
modifiers : Integer; { modifier flags }
|
||||
);
|
||||
1: (
|
||||
wmWhat : Integer;
|
||||
wmMessage : Longint;
|
||||
wmWhen : Longint;
|
||||
wmWhere : Point;
|
||||
wmModifiers : Integer;
|
||||
wmTaskData : Longint; { TaskMaster return value. }
|
||||
wmTaskMask : Longint; { TaskMaster feature mask. }
|
||||
wmLastClickTick : Longint;
|
||||
wmClickCount : Integer;
|
||||
wmTaskData2 : Longint;
|
||||
wmTaskData3 : Longint;
|
||||
wmTaskData4 : Longint;
|
||||
wmLastClickPt : Point;
|
||||
);
|
||||
END;
|
||||
PROCEDURE EMBootInit ; Tool $06,$01;
|
||||
PROCEDURE EMStartUp ( dPageAddr:Integer; queueSize:Integer; xMinClamp:Integer;
|
||||
xMaxClamp:Integer; yMinClamp:Integer; yMaxClamp:Integer; userID:Integer) ;
|
||||
Tool $06,$02;
|
||||
PROCEDURE EMShutDown ; Tool $06,$03;
|
||||
FUNCTION EMVersion : Integer ; Tool $06,$04;
|
||||
PROCEDURE EMReset ; Tool $06,$05;
|
||||
FUNCTION EMStatus : Boolean ; Tool $06,$06;
|
||||
FUNCTION Button ( buttonNum:Integer) : Boolean ; Tool $06,$0D;
|
||||
FUNCTION DoWindows : Integer ; Tool $06,$09;
|
||||
FUNCTION EventAvail ( eventMask:Integer;VAR eventPtr:EventRecord) : Boolean ;
|
||||
Tool $06,$0B;
|
||||
PROCEDURE FakeMouse ( changedFlag:Integer; modLatch:Integer; xPos:Integer;
|
||||
yPos:Integer; ButtonStatus:Integer) ; Tool $06,$19;
|
||||
FUNCTION FlushEvents ( eventMask:Integer; stopMask:Integer) : Integer ; Tool
|
||||
$06,$15;
|
||||
FUNCTION GetCaretTime : Longint ; Tool $06,$12;
|
||||
FUNCTION GetDblTime : Longint ; Tool $06,$11;
|
||||
PROCEDURE GetMouse (VAR mouseLocPtr:Point) ; Tool $06,$0C;
|
||||
FUNCTION GetNextEvent ( eventMask:Integer;VAR eventPtr:EventRecord) : Boolean ;
|
||||
Tool $06,$0A;
|
||||
FUNCTION GetOSEvent ( eventMask:Integer;VAR eventPtr:EventRecord) : Boolean ;
|
||||
Tool $06,$16;
|
||||
FUNCTION OSEventAvail ( eventMask:Integer;VAR eventPtr:EventRecord) : Boolean ;
|
||||
Tool $06,$17;
|
||||
FUNCTION PostEvent ( eventCode:Integer; eventMsg:Longint) : Integer ; Tool
|
||||
$06,$14;
|
||||
PROCEDURE SetEventMask ( sysEventMask:Integer) ; Tool $06,$18;
|
||||
PROCEDURE SetSwitch ; Tool $06,$13;
|
||||
FUNCTION StillDown ( buttonNum:Integer) : Boolean ; Tool $06,$0E;
|
||||
FUNCTION WaitMouseUp ( buttonNum:Integer) : Boolean ; Tool $06,$0F;
|
||||
FUNCTION TickCount : Longint ; Tool $06,$10;
|
||||
FUNCTION GetKeyTranslation : Integer ; Tool $06,$1B;
|
||||
PROCEDURE SetKeyTranslation ( kTransID:Integer) ; Tool $06,$1C;
|
||||
PROCEDURE SetAutoKeyLimit ( newLimit:Integer) ; Tool $06,$1A;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,103 @@
|
|||
{********************************************
|
||||
; File: Fonts.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT FONTS;
|
||||
INTERFACE
|
||||
USES TYPES,QUICKDRAW;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
fmDupStartUpErr = $1B01; {error - duplicate FMStartUp call }
|
||||
fmResetErr = $1B02; {error - can't reset the Font Manager }
|
||||
fmNotActiveErr = $1B03; {error - Font Manager not active }
|
||||
fmFamNotFndErr = $1B04; {error - family not found }
|
||||
fmFontNtFndErr = $1B05; {error - font not found }
|
||||
fmFontMemErr = $1B06; {error - font not in memory }
|
||||
fmSysFontErr = $1B07; {error - system font cannot be purgeable }
|
||||
fmBadFamNumErr = $1B08; {error - illegal family number }
|
||||
fmBadSizeErr = $1B09; {error - illegal size }
|
||||
fmBadNameErr = $1B0A; {error - illegal name length }
|
||||
fmMenuErr = $1B0B; {error - fix font menu never called }
|
||||
fmScaleSizeErr = $1B0C; {error - scaled size of font exeeds limits }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
newYork = $0002; {Family Number - }
|
||||
geneva = $0003; {Family Number - }
|
||||
monaco = $0004; {Family Number - }
|
||||
venice = $0005; {Family Number - }
|
||||
london = $0006; {Family Number - }
|
||||
athens = $0007; {Family Number - }
|
||||
sanFran = $0008; {Family Number - }
|
||||
toronto = $0009; {Family Number - }
|
||||
cairo = $000B; {Family Number - }
|
||||
losAngeles = $000C; {Family Number - }
|
||||
times = $0014; {Family Number - }
|
||||
helvetica = $0015; {Family Number - }
|
||||
courier = $0016; {Family Number - }
|
||||
symbol = $0017; {Family Number - }
|
||||
taliesin = $0018; {Family Number - }
|
||||
shaston = $FFFE; {Family Number - }
|
||||
baseOnlyBit = $0020; {FamSpecBits - }
|
||||
notBaseBit = $0020; {FamStatBits - }
|
||||
memOnlyBit = $0001; {FontSpecBits - }
|
||||
realOnlyBit = $0002; {FontSpecBits - }
|
||||
anyFamBit = $0004; {FontSpecBits - }
|
||||
anyStyleBit = $0008; {FontSpecBits - }
|
||||
anySizeBit = $0010; {FontSpecBits - }
|
||||
memBit = $0001; {FontStatBits - }
|
||||
unrealBit = $0002; {FontStatBits - }
|
||||
apFamBit = $0004; {FontStatBits - }
|
||||
apVarBit = $0008; {FontStatBits - }
|
||||
purgeBit = $0010; {FontStatBits - }
|
||||
notDiskBit = $0020; {FontStatBits - }
|
||||
notFoundBit = $8000; {FontStatBits - }
|
||||
dontScaleBit = $0001; {Scale Word - }
|
||||
|
||||
TYPE
|
||||
FontStatRecHndl = ^FontStatRecPtr;
|
||||
FontStatRecPtr = ^FontStatRec;
|
||||
FontStatRec = RECORD
|
||||
resultID : FontID;
|
||||
resultStats : Integer;
|
||||
END;
|
||||
PROCEDURE FMBootInit ; Tool $1B,$01;
|
||||
PROCEDURE FMStartUp ( userID:Integer; dPageAddr:Integer) ; Tool $1B,$02;
|
||||
PROCEDURE FMShutDown ; Tool $1B,$03;
|
||||
FUNCTION FMVersion : Integer ; Tool $1B,$04;
|
||||
PROCEDURE FMReset ; Tool $1B,$05;
|
||||
FUNCTION FMStatus : Boolean ; Tool $1B,$06;
|
||||
PROCEDURE AddFamily ( famNum:Integer; famName:Str255) ; Tool $1B,$0D;
|
||||
PROCEDURE AddFontVar ( fontHandle:FontHndl; newSpecs:Integer) ; Tool $1B,$14;
|
||||
FUNCTION ChooseFont ( currentID:FontID; famSpecs:Integer) : FontID ; Tool
|
||||
$1B,$16;
|
||||
FUNCTION CountFamilies ( famSpecs:Integer) : Integer ; Tool $1B,$09;
|
||||
FUNCTION CountFonts ( desiredID:FontId; fontSpecs:Integer) : Integer ; Tool
|
||||
$1B,$10;
|
||||
FUNCTION FamNum2ItemID ( famNum:Integer) : Integer ; Tool $1B,$1B;
|
||||
FUNCTION FindFamily ( famSpecs:Integer; positionNum:Integer; famName:Str255) :
|
||||
Integer ; Tool $1B,$0A;
|
||||
PROCEDURE FindFontStats ( desiredID:FontId; fontSpecs:Integer;
|
||||
positionNum:Integer;VAR resultPtr:FontStatRec) ; Tool $1B,$11;
|
||||
PROCEDURE FixFontMenu ( menuID:Integer; startingID:Integer; famSpecs:Integer)
|
||||
; Tool $1B,$15;
|
||||
FUNCTION FMGetCurFID : FontID ; Tool $1B,$1A;
|
||||
FUNCTION FMGetSysFID : FontID ; Tool $1B,$19;
|
||||
PROCEDURE FMSetSysFont ( newFontID:FontID) ; Tool $1B,$18;
|
||||
FUNCTION GetFamInfo ( famNum:Integer; famName:Str255) : Integer ; Tool $1B,$0B;
|
||||
FUNCTION GetFamNum ( famName:Str255) : Integer ; Tool $1B,$0C;
|
||||
PROCEDURE InstallFont ( desiredID:FontID; scaleWord:Integer) ; Tool $1B,$0E;
|
||||
PROCEDURE InstallWithStats ( desiredID:FontID; scaleWord:Integer;
|
||||
resultPtr:Ptr) ; Tool $1B,$1C;
|
||||
FUNCTION ItemID2FamNum ( itemID:Integer) : Integer ; Tool $1B,$17;
|
||||
PROCEDURE LoadFont ( desiredID:FontID; fontSpecs:Integer;
|
||||
positionNum:Integer;VAR resultPtr:FontStatRec) ; Tool $1B,$12;
|
||||
PROCEDURE LoadSysFont ; Tool $1B,$13;
|
||||
PROCEDURE SetPurgeStat ( theFontID:FontID; purgeStat:Integer) ; Tool $1B,$0F;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,138 @@
|
|||
{********************************************
|
||||
; File: FST.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT FST;
|
||||
INTERFACE
|
||||
USES Types,GSOS;
|
||||
|
||||
TYPE
|
||||
BufferControlRecPtr = ^BufferControlRec;
|
||||
BufferControlRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
refNum : Integer;
|
||||
flags : Integer;
|
||||
END;
|
||||
SpecialOpenForkRecPtr = ^SpecialOpenForkRec;
|
||||
SpecialOpenForkRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
referenceNum : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
accessMode : Integer;
|
||||
resourceNum : Integer;
|
||||
END;
|
||||
ByteRangeLockRecPtr = ^ByteRangeLockRec;
|
||||
ByteRangeLockRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
referenceNum : Integer;
|
||||
lockFlag : Integer;
|
||||
fileOffset : Longint;
|
||||
rangeLength : Longint;
|
||||
rangeStart : Longint;
|
||||
END;
|
||||
GetAccessRightsRecPtr = ^GetAccessRightsRec;
|
||||
GetAccessRightsRec = PACKED RECORD
|
||||
reserved : Byte;
|
||||
world : Byte;
|
||||
group : Byte;
|
||||
owner : Byte;
|
||||
END;
|
||||
GetPrivilegesRecPtr = ^GetPrivilegesRec;
|
||||
GetPrivilegesRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
accessRights : GetAccessRightsRec;
|
||||
ownerName : ResultBuf255Ptr;
|
||||
groupName : ResultBuf255Ptr;
|
||||
END;
|
||||
SetAccessRightsRecPtr = ^SetAccessRightsRec;
|
||||
SetAccessRightsRec = PACKED RECORD
|
||||
userSummary : Byte;
|
||||
world : Byte;
|
||||
group : Byte;
|
||||
owner : Byte;
|
||||
END;
|
||||
SetPrivilegesRecPtr = ^SetPrivilegesRec;
|
||||
SetPrivilegesRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
accessRights : SetAccessRightsRec;
|
||||
ownerName : ResultBuf255Ptr;
|
||||
groupName : ResultBuf255Ptr;
|
||||
END;
|
||||
UserInfoRecPtr = ^UserInfoRec;
|
||||
UserInfoRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
deviceNum : Integer;
|
||||
userName : ResultBuf255Ptr;
|
||||
primaryGroupName : ResultBuf255Ptr;
|
||||
END;
|
||||
CopyFileRecPtr = ^CopyFileRec;
|
||||
CopyFileRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
sourcePathname : GSString255Ptr;
|
||||
destPathname : GSString255Ptr;
|
||||
END;
|
||||
GetUserPathRecPtr = ^GetUserPathRec;
|
||||
GetUserPathRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
prefix : ResultBuf255Ptr;
|
||||
END;
|
||||
DesktopRecPtr = ^DesktopRec;
|
||||
DesktopRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
desktopRefNum : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
END;
|
||||
GetCommentRecPtr = ^GetCommentRec;
|
||||
GetCommentRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
desktopRefNum : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
comment : ResultBuf255Ptr;
|
||||
END;
|
||||
SetCommentRecPtr = ^SetCommentRec;
|
||||
SetCommentRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
desktopRefNum : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
comment : GSString255Ptr;
|
||||
END;
|
||||
GetServerNameRecPtr = ^GetServerNameRec;
|
||||
GetServerNameRec = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
command : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
serverName : ResultBuf255Ptr;
|
||||
zoneName : ResultBuf255Ptr;
|
||||
END;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,498 @@
|
|||
{********************************************
|
||||
; File: GSOS.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT GSOS;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
readEnable = $0001; {access - read enable bit: CreateRec, OpenRec access and
|
||||
requestAccess fields }
|
||||
writeEnable = $0002; {access - write enable bit: CreateRec, OpenRec access and
|
||||
requestAccess fields }
|
||||
fileInvisible = $0004; {access - Invisible bit }
|
||||
backupNeeded = $0020; {access - backup needed bit: CreateRec, OpenRec access
|
||||
field. (Must be 0 in requestAccess field ) }
|
||||
renameEnable = $0040; {access - rename enable bit: CreateRec, OpenRec access
|
||||
and requestAccess fields }
|
||||
destroyEnable = $0080; {access - destroy enable bit: CreateRec, OpenRec access
|
||||
and requestAccess fields }
|
||||
startPlus = $0000; {base - > setMark = displacement }
|
||||
eofMinus = $0001; {base - > setMark = eof - displacement }
|
||||
markPlus = $0002; {base - > setMark = mark + displacement }
|
||||
markMinus = $0003; {base - > setMark = mark - displacement }
|
||||
cacheOff = $0000; {cachePriority - do not cache blocks invloved in this read }
|
||||
cacheOn = $0001; {cachePriority - cache blocks invloved in this read if
|
||||
possible }
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
badSystemCall = $0001; {error - bad system call number }
|
||||
invalidPcount = $0004; {error - invalid parameter count }
|
||||
gsosActive = $07; {error - GS/OS already active }
|
||||
devNotFound = $10; {error - device not found }
|
||||
invalidDevNum = $11; {error - invalid device number }
|
||||
drvrBadReq = $20; {error - bad request or command }
|
||||
drvrBadCode = $0021; {error - bad control or status code }
|
||||
drvrBadParm = $0022; {error - bad call parameter }
|
||||
drvrNotOpen = $0023; {error - character device not open }
|
||||
drvrPriorOpen = $0024; {error - character device already open }
|
||||
irqTableFull = $0025; {error - interrupt table full }
|
||||
drvrNoResrc = $0026; {error - resources not available }
|
||||
drvrIOError = $0027; {error - I/O error }
|
||||
drvrNoDevice = $0028; {error - device not connected }
|
||||
drvrBusy = $0029; {error - call aborted, driver is busy }
|
||||
drvrWrtProt = $002B; {error - device is write protected }
|
||||
drvrBadCount = $002C; {error - invalid byte count }
|
||||
drvrBadBlock = $002D; {error - invalid block address }
|
||||
drvrDiskSwitch = $002E; {error - disk has been switched }
|
||||
drvrOffLine = $002F; {error - device off line/ no media present }
|
||||
badPathSyntax = $0040; {error - invalid pathname syntax }
|
||||
invalidRefNum = $0043; {error - invalid reference number }
|
||||
pathNotFound = $44; {error - subdirectory does not exist }
|
||||
volNotFound = $0045; {error - volume not found }
|
||||
fileNotFound = $0046; {error - file not found }
|
||||
dupPathname = $0047; {error - create or rename with existing name }
|
||||
volumeFull = $0048; {error - volume full error }
|
||||
volDirFull = $0049; {error - volume directory full }
|
||||
badFileFormat = $004A; {error - version error (incompatible file format) }
|
||||
badStoreType = $004B; {error - unsupported (or incorrect) storage type }
|
||||
eofEncountered = $004C; {error - end-of-file encountered }
|
||||
outOfRange = $004D; {error - position out of range }
|
||||
invalidAccess = $004E; {error - access not allowed }
|
||||
buffTooSmall = $004F; {error - buffer too small }
|
||||
fileBusy = $0050; {error - file is already open }
|
||||
dirError = $0051; {error - directory error }
|
||||
unknownVol = $0052; {error - unknown volume type }
|
||||
paramRangeErr = $0053; {error - parameter out of range }
|
||||
outOfMem = $0054; {error - out of memory }
|
||||
dupVolume = $0057; {error - duplicate volume name }
|
||||
notBlockDev = $0058; {error - not a block device }
|
||||
invalidLevel = $0059; {error - specifield level outside legal range }
|
||||
damagedBitMap = $005A; {error - block number too large }
|
||||
badPathNames = $005B; {error - invalid pathnames for ChangePath }
|
||||
notSystemFile = $005C; {error - not an executable file }
|
||||
osUnsupported = $005D; {error - Operating System not supported }
|
||||
stackOverflow = $005F; {error - too many applications on stack }
|
||||
dataUnavail = $0060; {error - Data unavailable }
|
||||
endOfDir = $0061; {error - end of directory has been reached }
|
||||
invalidClass = $0062; {error - invalid FST call class }
|
||||
resForkNotFound = $0063; {error - file does not contain required resource }
|
||||
invalidFSTID = $0064; {error - error - FST ID is invalid }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
(* *** File System IDs ***
|
||||
proDOSFSID = $0001; {fileSysID - ProDOS/SOS }
|
||||
dos33FSID = $0002; {fileSysID - DOS 3.3 }
|
||||
dos32FSID = $0003; {fileSysID - DOS 3.2 }
|
||||
dos31FSID = $0003; {fileSysID - DOS 3.1 }
|
||||
appleIIPascalFSID = $0004; {fileSysID - Apple II Pascal }
|
||||
mfsFSID = $0005; {fileSysID - Macintosh (flat file system) }
|
||||
hfsFSID = $0006; {fileSysID - Macintosh (hierarchical file system) }
|
||||
lisaFSID = $0007; {fileSysID - Lisa file system }
|
||||
appleCPMFSID = $0008; {fileSysID - Apple CP/M }
|
||||
charFSTFSID = $0009; {fileSysID - Character FST }
|
||||
msDOSFSID = $000A; {fileSysID - MS/DOS }
|
||||
highSierraFSID = $000B; {fileSysID - High Sierra }
|
||||
iso9660FSID = $000C; {fileSysID - ISO 9660 }
|
||||
appleShareFSID = $000D; {fileSysID - ISO 9660 }
|
||||
*** File System IDs *** *)
|
||||
|
||||
characterFST = $4000; {FSTInfo.attributes - character FST }
|
||||
ucFST = $8000; {FSTInfo.attributes - SCM should upper case pathnames before
|
||||
passing them to the FST }
|
||||
onStack = $8000; {QuitRec.flags - place state information about quitting
|
||||
program on the quit return stack }
|
||||
restartable = $4000; {QuitRec.flags - the quitting program is capable of being
|
||||
restarted from its dormant memory }
|
||||
seedling = $0001; {storageType - standard file with seedling structure }
|
||||
standardFile = $0001; {storageType - standard file type (no resource fork) }
|
||||
sapling = $0002; {storageType - standard file with sapling structure }
|
||||
tree = $0003; {storageType - standard file with tree structure }
|
||||
pascalRegion = $0004; {storageType - UCSD Pascal region on a partitioned disk }
|
||||
extendedFile = $0005; {storageType - extended file type (with resource fork) }
|
||||
directoryFile = $000D; {storageType - volume directory or subdirectory file }
|
||||
minorRelNumMask = $00FF; {version - minor release number }
|
||||
majorRelNumMask = $7F00; {version - major release number }
|
||||
finalRelNumMask = $8000; {version - final release number }
|
||||
isFileExtended = $8000; {GetDirEntryGS - }
|
||||
|
||||
TYPE
|
||||
GSString255Hndl = ^GSString255Ptr;
|
||||
GSString255Ptr = ^GSString255;
|
||||
GSString255 = RECORD
|
||||
length : Integer; { Number of Chars in text field }
|
||||
text : PACKED ARRAY[1..255] OF CHAR;
|
||||
END;
|
||||
GSString255HndlPtr = ^GSString255Hndl;
|
||||
|
||||
GSString32Hndl = ^GSString32Ptr;
|
||||
GSString32Ptr = ^GSString32;
|
||||
GSString32 = RECORD
|
||||
length : Integer; { Number of characters in text field }
|
||||
text : PACKED ARRAY[1..32] OF CHAR;
|
||||
END;
|
||||
ResultBuf255Hndl = ^ResultBuf255Ptr;
|
||||
ResultBuf255Ptr = ^ResultBuf255;
|
||||
ResultBuf255 = RECORD
|
||||
bufSize : Integer;
|
||||
bufString : GSString255;
|
||||
END;
|
||||
ResultBuf255HndlPtr = ^ResultBuf255Hndl;
|
||||
|
||||
ResultBuf32Hndl = ^ResultBuf32Ptr;
|
||||
ResultBuf32Ptr = ^ResultBuf32;
|
||||
ResultBuf32 = RECORD
|
||||
bufSize : Integer;
|
||||
bufString : GSString32;
|
||||
END;
|
||||
ChangePathRecPtrGS = ^ChangePathRecGS;
|
||||
ChangePathRecGS = RECORD
|
||||
pCount : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
newPathname : GSString255Ptr;
|
||||
END;
|
||||
CreateRecPtrGS = ^CreateRecGS;
|
||||
CreateRecGS = RECORD
|
||||
pCount : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
access : Integer;
|
||||
fileType : Integer;
|
||||
auxType : Longint;
|
||||
storageType : Integer;
|
||||
eof : Longint;
|
||||
resourceEOF : Longint;
|
||||
END;
|
||||
DAccessRecPtrGS = ^DAccessRecGS;
|
||||
DAccessRecGS = RECORD
|
||||
pCount : Integer;
|
||||
devNum : Integer;
|
||||
code : Integer;
|
||||
list : Ptr;
|
||||
requestCount : Longint;
|
||||
transferCount : Longint;
|
||||
END;
|
||||
DevNumRecPtrGS = ^DevNumRecGS;
|
||||
DevNumRecGS = RECORD
|
||||
pCount : Integer;
|
||||
devName : GSString255Ptr;
|
||||
devNum : Integer;
|
||||
END;
|
||||
DInfoRecPtrGS = ^DInfoRecGS;
|
||||
DInfoRecGS = RECORD
|
||||
pCount : Integer; { minimum = 2 }
|
||||
devNum : Integer;
|
||||
devName : GSString32Ptr;
|
||||
characteristics : Integer;
|
||||
totalBlocks : Longint;
|
||||
slotNum : Integer;
|
||||
unitNum : Integer;
|
||||
version : Integer;
|
||||
deviceID : Integer;
|
||||
headLink : Integer;
|
||||
forwardLink : Integer;
|
||||
extendedDIBptr : Longint;
|
||||
END;
|
||||
DIORecPtrGS = ^DIORecGS;
|
||||
DIORecGS = RECORD
|
||||
pCount : Integer;
|
||||
devNum : Integer;
|
||||
buffer : Ptr;
|
||||
requestCount : Longint;
|
||||
startingBlock : Longint;
|
||||
blockSize : Integer;
|
||||
transferCount : Longint;
|
||||
END;
|
||||
DirEntryRecPtrGS = ^DirEntryRecGS;
|
||||
DirEntryRecGS = RECORD
|
||||
pCount : Integer;
|
||||
refNum : Integer;
|
||||
flags : Integer;
|
||||
base : Integer;
|
||||
displacement : Integer;
|
||||
name : Ptr;
|
||||
entryNum : Integer;
|
||||
fileType : Integer;
|
||||
eof : Longint;
|
||||
blockCount : Longint;
|
||||
createDateTime : TimeRec;
|
||||
modDateTime : TimeRec;
|
||||
access : Integer;
|
||||
auxType : Longint;
|
||||
fileSysID : Integer;
|
||||
optionList : ResultBuf255Ptr;
|
||||
resourceEOF : Longint;
|
||||
resourceBlocks : Longint;
|
||||
END;
|
||||
ExpandPathRecPtrGS = ^ExpandPathRecGS;
|
||||
ExpandPathRecGS = RECORD
|
||||
pCount : Integer;
|
||||
inputPath : GSString255Ptr;
|
||||
outputPath : ResultBuf255Ptr;
|
||||
flags : Integer;
|
||||
END;
|
||||
FileInfoRecPtrGS = ^FileInfoRecGS;
|
||||
FileInfoRecGS = RECORD
|
||||
pCount : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
access : Integer;
|
||||
fileType : Integer;
|
||||
auxType : Longint;
|
||||
storageType : Integer; { must be 0 for SetFileInfo }
|
||||
createDateTime : TimeRec;
|
||||
modDateTime : TimeRec;
|
||||
optionList : Longint;
|
||||
eof : Longint;
|
||||
blocksUsed : Longint; { must be 0 for SetFileInfo }
|
||||
resourceEOF : Longint; { must be 0 for SetFileInfo }
|
||||
resourceBlocks : Longint; { must be 0 for SetFileInfo }
|
||||
END;
|
||||
FormatRecPtrGS = ^FormatRecGS;
|
||||
FormatRecGS = RECORD
|
||||
pCount : Integer;
|
||||
devName : GSString32Ptr; { device name pointer }
|
||||
volName : GSString32Ptr; { volume name pointer }
|
||||
fileSysID : Integer; { file system ID }
|
||||
reqFileSysID : Integer; { in; }
|
||||
END;
|
||||
FSTInfoRecPtrGS = ^FSTInfoRecGS;
|
||||
FSTInfoRecGS = RECORD
|
||||
pCount : Integer;
|
||||
fstNum : Integer;
|
||||
fileSysID : Integer;
|
||||
fstName : ResultBuf255Ptr;
|
||||
version : Integer;
|
||||
attributes : Integer;
|
||||
blockSize : Integer;
|
||||
maxVolSize : Longint;
|
||||
maxFileSize : Longint;
|
||||
END;
|
||||
InterruptRecPtrGS = ^InterruptRecGS;
|
||||
InterruptRecGS = RECORD
|
||||
pCount : Integer;
|
||||
intNum : Integer;
|
||||
vrn : Integer; { used only by BindInt }
|
||||
intCode : Longint; { used only by BindInt }
|
||||
END;
|
||||
IORecPtrGS = ^IORecGS;
|
||||
IORecGS = RECORD
|
||||
pCount : Integer;
|
||||
refNum : Integer;
|
||||
dataBuffer : Ptr;
|
||||
requestCount : Longint;
|
||||
transferCount : Longint;
|
||||
cachePriority : Integer;
|
||||
END;
|
||||
LevelRecPtrGS = ^LevelRecGS;
|
||||
LevelRecGS = RECORD
|
||||
pCount : Integer;
|
||||
level : Integer;
|
||||
END;
|
||||
NameRecPtrGS = ^NameRecGS;
|
||||
NameRecGS = RECORD
|
||||
pCount : Integer;
|
||||
pathname : GSString255Ptr; { full pathname or a filename depending on call
|
||||
}
|
||||
END;
|
||||
GetNameRecPtrGS = ^GetNameRecGS;
|
||||
GetNameRecGS = RECORD
|
||||
pCount : Integer;
|
||||
dataBuffer : ResultBuf255Ptr; { full pathname or a filename depending on
|
||||
call }
|
||||
END;
|
||||
NewlineRecPtrGS = ^NewlineRecGS;
|
||||
NewlineRecGS = RECORD
|
||||
pCount : Integer;
|
||||
refNum : Integer;
|
||||
enableMask : Integer;
|
||||
numChars : Integer;
|
||||
newlineTable : Ptr;
|
||||
END;
|
||||
OpenRecPtrGS = ^OpenRecGS;
|
||||
OpenRecGS = RECORD
|
||||
pCount : Integer;
|
||||
refNum : Integer;
|
||||
pathname : GSString255Ptr;
|
||||
requestAccess : Integer;
|
||||
resourceNumber : Integer; { For extended files: dataFork/resourceFork }
|
||||
access : Integer; { Value of file's access attribute }
|
||||
fileType : Integer; { Value of file's fileType attribute }
|
||||
auxType : Longint;
|
||||
storageType : Integer;
|
||||
createDateTime : TimeRec;
|
||||
modDateTime : TimeRec;
|
||||
optionList : IntPtr;
|
||||
eof : Longint;
|
||||
blocksUsed : Longint;
|
||||
resourceEOF : Longint;
|
||||
resourceBlocks : Longint;
|
||||
END;
|
||||
OSShutdownRecPtrGS = ^OSShutdownRecGS;
|
||||
OSShutdownRecGS = RECORD
|
||||
pCount : Integer; { in }
|
||||
shutdownFlag : Integer; { in }
|
||||
END;
|
||||
PositionRecPtrGS = ^PositionRecGS;
|
||||
PositionRecGS = RECORD
|
||||
pCount : Integer;
|
||||
refNum : Integer;
|
||||
position : Longint;
|
||||
END;
|
||||
EOFRecPtrGS = ^EOFRecGS;
|
||||
EOFRecGS = RECORD
|
||||
pCount : Integer;
|
||||
refNum : Integer;
|
||||
eof : Longint;
|
||||
END;
|
||||
PrefixRecPtrGS = ^PrefixRecGS;
|
||||
PrefixRecGS = RECORD
|
||||
pCount : Integer;
|
||||
prefixNum : Integer;
|
||||
CASE INTEGER OF
|
||||
0: (getPrefix : ResultBuf255Ptr;);
|
||||
1: (setPrefix : GSString255Ptr;);
|
||||
END;
|
||||
QuitRecPtrGS = ^QuitRecGS;
|
||||
QuitRecGS = RECORD
|
||||
pCount : Integer;
|
||||
pathname : GSString255Ptr; { pathname of next app to run }
|
||||
flags : Integer;
|
||||
END;
|
||||
RefnumRecPtrGS = ^RefNumRecGS;
|
||||
RefNumRecGS = RECORD
|
||||
pCount : Integer;
|
||||
refNum : Integer;
|
||||
END;
|
||||
SessionStatusRecPtrGS = ^SessionStatusRecGS;
|
||||
SessionStatusRecGS = RECORD
|
||||
pCount : Integer; { in: min = 1 }
|
||||
status : Integer; { out: }
|
||||
END;
|
||||
SetPositionRecPtrGS = ^SetPositionRecGS;
|
||||
SetPositionRecGS = RECORD
|
||||
pCount : Integer;
|
||||
refNum : Integer;
|
||||
base : Integer;
|
||||
displacement : Longint;
|
||||
END;
|
||||
SysPrefsRecPtrGS = ^SysPrefsRecGS;
|
||||
SysPrefsRecGS = RECORD
|
||||
pCount : Integer;
|
||||
preferences : Integer;
|
||||
END;
|
||||
VersionRecPtrGS = ^VersionRecGS;
|
||||
VersionRecGS = RECORD
|
||||
pCount : Integer;
|
||||
version : Integer;
|
||||
END;
|
||||
VolumeRecPtrGS = ^VolumeRecGS;
|
||||
VolumeRecGS = RECORD
|
||||
pCount : Integer;
|
||||
devName : GSString32Ptr;
|
||||
volName : ResultBuf255Ptr;
|
||||
totalBlocks : Longint;
|
||||
freeBlocks : Longint;
|
||||
fileSysID : Integer;
|
||||
blockSize : Integer;
|
||||
END;
|
||||
PROCEDURE BeginSessionGS (VAR pblockPtr: SessionStatusRecGS); GSOS $201D ;
|
||||
|
||||
PROCEDURE BindIntGS (VAR pblockPtr: InterruptRecGS); GSOS $2031 ;
|
||||
|
||||
PROCEDURE ChangePathGS (VAR pblockPtr: ChangePathRecGS); GSOS $2004 ;
|
||||
|
||||
PROCEDURE ClearBackupBitGS (VAR pblockPtr: NameRecGS); GSOS $200B ;
|
||||
|
||||
PROCEDURE CloseGS (VAR pblockPtr: RefNumRecGS); GSOS $2014 ;
|
||||
|
||||
PROCEDURE CreateGS (VAR pblockPtr: CreateRecGS); GSOS $2001 ;
|
||||
|
||||
PROCEDURE DControlGS (VAR pblockPtr: DAccessRecGS); GSOS $202E ;
|
||||
|
||||
PROCEDURE DestroyGS (VAR pblockPtr: NameRecGS); GSOS $2002 ;
|
||||
|
||||
PROCEDURE DInfoGS (VAR pblockPtr: DInfoRecGS); GSOS $202C ;
|
||||
|
||||
PROCEDURE DReadGS (VAR pblockPtr: DIORecGS); GSOS $202F ;
|
||||
|
||||
PROCEDURE DStatusGS (VAR pblockPtr: DAccessRecGS); GSOS $202D ;
|
||||
|
||||
PROCEDURE DWriteGS (VAR pblockPtr: DIORecGS); GSOS $2030 ;
|
||||
|
||||
PROCEDURE EndSessionGS (VAR pblockPtr: SessionStatusRecGS); GSOS $201E ;
|
||||
|
||||
PROCEDURE EraseDiskGS (VAR pblockPtr: FormatRecGS); GSOS $2025 ;
|
||||
|
||||
PROCEDURE ExpandPathGS (VAR pblockPtr: ExpandPathRecGS); GSOS $200E ;
|
||||
|
||||
PROCEDURE FlushGS (VAR pblockPtr: RefNumRecGS); GSOS $2015 ;
|
||||
|
||||
PROCEDURE FormatGS (VAR pblockPtr: FormatRecGS); GSOS $2024 ;
|
||||
|
||||
PROCEDURE GetBootVolGS (VAR pblockPtr: NameRecGS); GSOS $2028 ;
|
||||
|
||||
PROCEDURE GetDevNumberGS (VAR pblockPtr: DevNumRecGS); GSOS $2020 ;
|
||||
|
||||
PROCEDURE GetDirEntryGS (VAR pblockPtr: DirEntryRecGS); GSOS $201C ;
|
||||
|
||||
PROCEDURE GetEOFGS (VAR pblockPtr: EOFRecGS); GSOS $2019 ;
|
||||
|
||||
PROCEDURE GetFileInfoGS (VAR pblockPtr: FileInfoRecGS); GSOS $2006 ;
|
||||
|
||||
PROCEDURE GetFSTInfoGS (VAR pblockPtr: FSTInfoRecGS); GSOS $202B ;
|
||||
|
||||
PROCEDURE GetLevelGS (VAR pblockPtr: LevelRecGS); GSOS $201B ;
|
||||
|
||||
PROCEDURE GetMarkGS (VAR pblockPtr: PositionRecGS); GSOS $2017 ;
|
||||
|
||||
PROCEDURE GetNameGS (VAR pblockPtr: GetNameRecGS); GSOS $2027 ;
|
||||
|
||||
PROCEDURE GetPrefixGS (VAR pblockPtr: PrefixRecGS); GSOS $200A ;
|
||||
|
||||
PROCEDURE GetVersionGS (VAR pblockPtr: VersionRecGS); GSOS $202A ;
|
||||
|
||||
PROCEDURE GetSysPrefsGS (VAR pblockPtr: SysPrefsRecGS); GSOS $200F ;
|
||||
|
||||
PROCEDURE NewlineGS (VAR pblockPtr: NewlineRecGS); GSOS $2011 ;
|
||||
|
||||
PROCEDURE NullGS (VAR pblockPtr: IntPtr); GSOS $200D ;
|
||||
|
||||
PROCEDURE OpenGS (VAR pblockPtr: OpenRecGS); GSOS $2010 ;
|
||||
|
||||
PROCEDURE QuitGS (VAR pblockPtr: QuitRecGS); GSOS $2029 ;
|
||||
|
||||
PROCEDURE ReadGS (VAR pblockPtr: IORecGS); GSOS $2012 ;
|
||||
|
||||
PROCEDURE ResetCacheGS (VAR pblockPtr: IntPtr); GSOS $2026 ;
|
||||
|
||||
PROCEDURE SessionStatusGS (VAR pblockPtr: SessionStatusRecGS); GSOS $201F ;
|
||||
|
||||
PROCEDURE SetEOFGS (VAR pblockPtr: SetPositionRecGS); GSOS $2018 ;
|
||||
|
||||
PROCEDURE SetFileInfoGS (VAR pblockPtr: FileInfoRecGS); GSOS $2005 ;
|
||||
|
||||
PROCEDURE SetLevelGS (VAR pblockPtr: LevelRecGS); GSOS $201A ;
|
||||
|
||||
PROCEDURE SetMarkGS (VAR pblockPtr: SetPositionRecGS); GSOS $2016 ;
|
||||
|
||||
PROCEDURE SetPrefixGS (VAR pblockPtr: PrefixRecGS); GSOS $2009 ;
|
||||
|
||||
PROCEDURE SetSysPrefsGS (VAR pblockPtr: SysPrefsRecGS); GSOS $200C ;
|
||||
|
||||
PROCEDURE UnbindIntGS (VAR pblockPtr: InterruptRecGS); GSOS $2032 ;
|
||||
|
||||
PROCEDURE VolumeGS (VAR pblockPtr: VolumeRecGS); GSOS $2008 ;
|
||||
|
||||
PROCEDURE WriteGS (VAR pblockPtr: IORecGS); GSOS $2013 ;
|
||||
|
||||
PROCEDURE OSShutdownGS (VAR pblockPtr: OSShutdownRecGS); GSOS $2003 ;
|
||||
|
||||
PROCEDURE FSTSpecific (VAR pBlockPtr: Ptr); GSOS $2033 ;
|
||||
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,111 @@
|
|||
{********************************************
|
||||
; File: IntMath.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT INTMATH;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
imBadInptParam = $0B01; {error - bad input parameter }
|
||||
imIllegalChar = $0B02; {error - Illegal character in string }
|
||||
imOverflow = $0B03; {error - integer or long integer overflow }
|
||||
imStrOverflow = $0B04; {error - string overflow }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
minLongint = $80000000; {Limit - minimum negative signed long integer }
|
||||
minFrac = $80000000; {Limit - pinned value for negative Frac overflow }
|
||||
minFixed = $80000000; {Limit - pinned value for negative Fixed overflow }
|
||||
minInt = $8000; {Limit - Minimum negative signed integer }
|
||||
maxInt = $7FFF; {Limit - Maximum positive signed integer }
|
||||
maxUInt = $FFFF; {Limit - Maximum positive unsigned integer }
|
||||
maxLongint = $7FFFFFFF; {Limit - maximum positive signed Longint }
|
||||
maxFrac = $7FFFFFFF; {Limit - pinned value for positive Frac overflow }
|
||||
maxFixed = $7FFFFFFF; {Limit - pinned value for positive Fixed overflow }
|
||||
maxULong = $FFFFFFFF; {Limit - maximum unsigned Long }
|
||||
unsignedFlag = $0000; {SignedFlag - }
|
||||
signedFlag = $0001; {SignedFlag - }
|
||||
|
||||
TYPE
|
||||
IntDivRecPtr = ^IntDivRec;
|
||||
IntDivRec = RECORD
|
||||
quotient : Integer; { quotient from SDivide }
|
||||
remainder : Integer; { remainder from SDivide }
|
||||
END;
|
||||
LongDivRecPtr = ^LongDivRec;
|
||||
LongDivRec = RECORD
|
||||
quotient : Longint; { Quotient from LongDiv }
|
||||
remainder : Longint; { remainder from LongDiv }
|
||||
END;
|
||||
DivRecPtr = ^DivRec; (* for backward compatability *)
|
||||
DivRec = LongDivRec;
|
||||
LongMulRecPtr = ^LongMulRec;
|
||||
LongMulRec = RECORD
|
||||
lsResult : Longint; { low 2 words of product }
|
||||
msResult : Longint; { High 2 words of product }
|
||||
END;
|
||||
WordDivRecPtr = ^WordDivRec;
|
||||
WordDivRec = RECORD
|
||||
quotient : Integer; { Quotient from UDivide }
|
||||
remainder : Integer; { remainder from UDivide }
|
||||
END;
|
||||
PROCEDURE IMBootInit ; Tool $0B,$01;
|
||||
PROCEDURE IMStartUp ; Tool $0B,$02;
|
||||
PROCEDURE IMShutDown ; Tool $0B,$03;
|
||||
FUNCTION IMVersion : Integer ; Tool $0B,$04;
|
||||
PROCEDURE IMReset ; Tool $0B,$05;
|
||||
FUNCTION IMStatus : Boolean ; Tool $0B,$06;
|
||||
FUNCTION Dec2Int ( strPtr:Ptr; strLength:Integer; signedFlag:Boolean) : Integer
|
||||
; Tool $0B,$28;
|
||||
FUNCTION Dec2Long ( strPtr:Ptr; strLength:Integer; signedFlag:Boolean) :
|
||||
Longint ; Tool $0B,$29;
|
||||
FUNCTION Fix2Frac ( fixedValue:Fixed) : Frac ; Tool $0B,$1C;
|
||||
FUNCTION Fix2Long ( fixedValue:Fixed) : Longint ; Tool $0B,$1B;
|
||||
PROCEDURE Fix2X ( fixedValue:Fixed;VAR extendPtr:Extended) ; Tool $0B,$1E;
|
||||
FUNCTION FixATan2 ( input1:Longint; input2:Longint) : Fixed ; Tool $0B,$17;
|
||||
FUNCTION FixDiv ( dividend:Longint; divisor:Longint) : Fixed ; Tool $0B,$11;
|
||||
FUNCTION FixMul ( multiplicand:Fixed; multiplier:Fixed) : Fixed ; Tool $0B,$0F;
|
||||
FUNCTION FixRatio ( numerator:Integer; denominator:Integer) : Fixed ; Tool
|
||||
$0B,$0E;
|
||||
FUNCTION FixRound ( fixedValue:Fixed) : Integer ; Tool $0B,$13;
|
||||
FUNCTION Frac2Fix ( fracValue:Frac) : Fixed ; Tool $0B,$1D;
|
||||
PROCEDURE Frac2X ( fracValue:Frac;VAR extendPtr:Extended) ; Tool $0B,$1F;
|
||||
FUNCTION FracCos ( angle:Fixed) : Frac ; Tool $0B,$15;
|
||||
FUNCTION FracDiv ( dividend:Longint; divisor:Longint) : Frac ; Tool $0B,$12;
|
||||
FUNCTION FracMul ( multiplicand:Frac; multiplier:Frac) : Frac ; Tool $0B,$10;
|
||||
FUNCTION FracSin ( angle:Fixed) : Frac ; Tool $0B,$16;
|
||||
FUNCTION FracSqrt ( fracValue:Frac) : Frac ; Tool $0B,$14;
|
||||
FUNCTION Hex2Int ( strPtr:Ptr; strLength:Integer) : Integer ; Tool $0B,$24;
|
||||
FUNCTION Hex2Long ( strPtr:Ptr; strLength:Integer) : Longint ; Tool $0B,$25;
|
||||
FUNCTION HexIt ( intValue:Integer) : Longint ; Tool $0B,$2A;
|
||||
FUNCTION HiWord ( longValue:Longint) : Integer ; Tool $0B,$18;
|
||||
PROCEDURE Int2Dec ( wordValue:Integer; strPtr:Ptr; strLength:Integer;
|
||||
signedFlag:Boolean) ; Tool $0B,$26;
|
||||
PROCEDURE Int2Hex ( intValue:Integer; strPtr:Ptr; strLength:Integer) ; Tool
|
||||
$0B,$22;
|
||||
PROCEDURE Long2Dec ( longValue:Longint; strPtr:Ptr; strLength:Integer;
|
||||
signedFlag:Boolean) ; Tool $0B,$27;
|
||||
FUNCTION Long2Fix ( longValue:Longint) : Fixed ; Tool $0B,$1A;
|
||||
PROCEDURE Long2Hex ( longValue:Longint; strPtr:Ptr; strLength:Integer) ; Tool
|
||||
$0B,$23;
|
||||
FUNCTION LongDivide ( dividend:Longint; divisor:Longint) : LongDivRec ;
|
||||
EXTERNAL ;
|
||||
FUNCTION LongMul ( multiplicand:Longint; multiplier:Longint) : LongMulRec ;
|
||||
EXTERNAL ;
|
||||
FUNCTION LoWord ( longValue:Longint) : Integer ; Tool $0B,$19;
|
||||
FUNCTION Multiply ( multiplicand:Integer; multiplier:Integer) : Longint ; Tool
|
||||
$0B,$09;
|
||||
FUNCTION SDivide ( dividend:Integer; divisor:Integer) : IntDivRec ; Tool
|
||||
$0B,$0A;
|
||||
FUNCTION UDivide ( dividend:Integer; divisor:Integer) : WordDivRec ; Tool
|
||||
$0B,$0B;
|
||||
FUNCTION X2Fix ( extendPtr:ExtendedPtr) : Longint ; Tool $0B,$20;
|
||||
FUNCTION X2Frac ( extendPtr:ExtendedPtr) : Longint ; Tool $0B,$21;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,95 @@
|
|||
{********************************************
|
||||
; File: LineEdit.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT LINEEDIT;
|
||||
INTERFACE
|
||||
USES TYPES,QUICKDRAW,EVENTS;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
leDupStrtUpErr = $1401; {error - duplicate LEStartup call }
|
||||
leResetErr = $1402; {error - can't reset Line Edit }
|
||||
leNotActiveErr = $1403; {error - Line Edit not active }
|
||||
leScrapErr = $1404; {error - desk scrap too big to copy }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
leJustLeft = $0000; {Justification - }
|
||||
leJustCenter = $0001; {Justification - }
|
||||
leJustFill = $0002; {Justification - }
|
||||
leJustRight = $FFFF; {Justification - }
|
||||
|
||||
TYPE
|
||||
LERecHndl = ^LERecPtr;
|
||||
LERecPtr = ^LERec;
|
||||
LERec = RECORD
|
||||
leLineHandle : Handle;
|
||||
leLength : Integer;
|
||||
leMaxLength : Integer;
|
||||
leDestRect : Rect;
|
||||
leViewRect : Rect;
|
||||
lePort : GrafPortPtr;
|
||||
leLineHite : Integer;
|
||||
leBaseHite : Integer;
|
||||
leSelStart : Integer;
|
||||
leSelEnd : Integer;
|
||||
leActFlg : Integer;
|
||||
leCarAct : Integer;
|
||||
leCarOn : Integer;
|
||||
leCarTime : Longint;
|
||||
leHiliteHook : VoidProcPtr;
|
||||
leCaretHook : VoidProcPtr;
|
||||
leJust : Integer;
|
||||
lePWChar : Integer;
|
||||
END;
|
||||
PROCEDURE LEBootInit ; Tool $14,$01;
|
||||
PROCEDURE LEStartUp ( userID:Integer; dPageAddr:Integer) ; Tool $14,$02;
|
||||
PROCEDURE LEShutDown ; Tool $14,$03;
|
||||
FUNCTION LEVersion : Integer ; Tool $14,$04;
|
||||
PROCEDURE LEReset ; Tool $14,$05;
|
||||
FUNCTION LEStatus : Boolean ; Tool $14,$06;
|
||||
PROCEDURE LEActivate ( leRecHandle:LERecHndl) ; Tool $14,$0F;
|
||||
PROCEDURE LEClick ( eventPtr:EventRecord; leRecHandle:LERecHndl) ; Tool
|
||||
$14,$0D;
|
||||
PROCEDURE LECopy ( leRecHandle:LERecHndl) ; Tool $14,$13;
|
||||
PROCEDURE LECut ( leRecHandle:LERecHndl) ; Tool $14,$12;
|
||||
PROCEDURE LEDeactivate ( leRecHandle:LERecHndl) ; Tool $14,$10;
|
||||
PROCEDURE LEDelete ( leRecHandle:LERecHndl) ; Tool $14,$15;
|
||||
PROCEDURE LEDispose ( leRecHandle:LERecHndl) ; Tool $14,$0A;
|
||||
PROCEDURE LEFromScrap ; Tool $14,$19;
|
||||
FUNCTION LEGetScrapLen : Integer ; Tool $14,$1C;
|
||||
FUNCTION LEGetTextHand ( leRecHandle:LERecHndl) : Handle ; Tool $14,$22;
|
||||
FUNCTION LEGetTextLen ( leRecHandle:LERecHndl) : Integer ; Tool $14,$23;
|
||||
PROCEDURE LEIdle ( leRecHandle:LERecHndl) ; Tool $14,$0C;
|
||||
PROCEDURE LEInsert ( textPtr:Ptr; textLength:Integer; leRecHandle:LERecHndl) ;
|
||||
Tool $14,$16;
|
||||
PROCEDURE LEKey ( theKey:CHAR; modifiers:Integer; leRecHandle:LERecHndl) ;
|
||||
Tool $14,$11;
|
||||
FUNCTION LENew ( destRectPtr:Rect; viewRectPtr:Rect; maxTextLen:Integer) :
|
||||
LERecHndl ; Tool $14,$09;
|
||||
PROCEDURE LEPaste ( leRecHandle:LERecHndl) ; Tool $14,$14;
|
||||
FUNCTION LEScrapHandle : Handle ; Tool $14,$1B;
|
||||
PROCEDURE LESetCaret ( caretProcPtr:VoidProcPtr; leRecHandle:LERecHndl) ; Tool
|
||||
$14,$1F;
|
||||
PROCEDURE LESetHilite ( hiliteProcPtr:VoidProcPtr; leRecHandle:LERecHndl) ;
|
||||
Tool $14,$1E;
|
||||
PROCEDURE LESetJust ( just:Integer; leRecHandle:LERecHndl) ; Tool $14,$21;
|
||||
PROCEDURE LESetScrapLen ( newLength:Integer) ; Tool $14,$1D;
|
||||
PROCEDURE LESetSelect ( selStart:Integer; selEnd:Integer;
|
||||
leRecHandle:LERecHndl) ; Tool $14,$0E;
|
||||
PROCEDURE LESetText ( textPtr:Ptr; textLength:Integer; leRecHandle:LERecHndl)
|
||||
; Tool $14,$0B;
|
||||
PROCEDURE LETextBox ( textPtr:Ptr; textLength:Integer; rectPtr:Rect;
|
||||
just:Integer) ; Tool $14,$18;
|
||||
PROCEDURE LETextBox2 ( textPtr:Ptr; textLength:Integer; rectPtr:Rect;
|
||||
just:Integer) ; Tool $14,$20;
|
||||
PROCEDURE LEToScrap ; Tool $14,$1A;
|
||||
PROCEDURE LEUpdate ( leRecHandle:LERecHndl) ; Tool $14,$17;
|
||||
FUNCTION GetLEDefProc : Ptr ; Tool $14,$24;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,106 @@
|
|||
{********************************************
|
||||
; File: Lists.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT LISTS;
|
||||
INTERFACE
|
||||
USES TYPES,QUICKDRAW,EVENTS,CONTROLS;
|
||||
CONST
|
||||
|
||||
cString = $0001; {ListType bit mask - null terminated string type }
|
||||
LIST_STRG = $0001; {ListType bit mask - null terminated string type }
|
||||
selectOnlyOne = $0002; {ListType bit mask - only one selection allowed }
|
||||
LIST_SELECT = $0002; {ListType bit mask - single selection only }
|
||||
memDisabled = $40; {memFlag - Sets member flag to disabled }
|
||||
memSelected = $80; {memFlag - Sets member flag to selected }
|
||||
|
||||
TYPE
|
||||
LColorTableHndl = ^LColorTablePtr;
|
||||
LColorTablePtr = ^LColorTable;
|
||||
LColorTable = RECORD
|
||||
listFrameClr : Integer; { Frame color }
|
||||
listNorTextClr : Integer; { Unhighlighted text color }
|
||||
listSelTextClr : Integer; { Highlighted text color }
|
||||
listNorBackClr : Integer; { Unhighlighted background color }
|
||||
listSelBackClr : Integer; { Highlighted backgraound color }
|
||||
END;
|
||||
MemRecHndl = ^MemRecPtr;
|
||||
MemRecPtr = ^MemRec;
|
||||
MemRec = PACKED RECORD
|
||||
memPtr : Ptr; { Pointer to string, or custom }
|
||||
memFlag : Byte; { Bit Flag }
|
||||
END;
|
||||
ListCtlRecHndl = ^ListCtlRecPtr;
|
||||
ListCtlRecPtr = ^ListCtlRec;
|
||||
ListCtlRec = PACKED RECORD
|
||||
ctlNext : CtlRecHndl; { Handle of Next Control }
|
||||
ctlOwner : GrafPortPtr; { Window owner }
|
||||
ctlRect : Rect; { Enclosing Rect }
|
||||
ctlFlag : Byte; { Bit 7 visible, Bit 0 string type, Bit 1 multiple }
|
||||
ctlHilite : Byte; { (not used) }
|
||||
ctlValue : Integer; { First member in display }
|
||||
ctlProc : LongProcPtr; { Address of list definition procedure }
|
||||
ctlAction : LongProcPtr; { Address of list action procedure }
|
||||
ctlData : Longint; { Low = view size, High = total members }
|
||||
ctlRefCon : Longint; { Not used }
|
||||
ctlColor : LColorTablePtr; { Null for default colors }
|
||||
ctlMemDraw : VoidProcPtr; { Address of routine to draw members }
|
||||
ctlMemHeight : Integer; { Member's Height in Pixels }
|
||||
ctlMemSize : Integer; { Bytes in member record }
|
||||
ctlList : MemRecPtr; { Adress of first member record in array }
|
||||
ctlListBar : CtlRecHndl; { Handle of list contrlo's scroll bar control }
|
||||
END;
|
||||
ListRecHndl = ^ListRecPtr;
|
||||
ListRecPtr = ^ListRec;
|
||||
ListRec = RECORD
|
||||
listRect : Rect; { Enclosing Rectangle }
|
||||
listSize : Integer; { Number of List Members }
|
||||
listView : Integer; { Max Viewable members }
|
||||
listType : Integer; { Bit Flag }
|
||||
listStart : Integer; { First member in view }
|
||||
listCtl : CtlRecHndl; { List control's handle }
|
||||
listDraw : VoidProcPtr; { Address of Custom drawing routine }
|
||||
listMemHeight : Integer; { Height of list members }
|
||||
listMemSize : Integer; { Size of Member Records }
|
||||
listPointer : MemRecPtr; { Pointer to first element in MemRec array }
|
||||
listRefCon : Longint; { becomes Control's refCon }
|
||||
listScrollClr : BarColorsPtr; { Color table for list's scroll bar }
|
||||
END;
|
||||
PROCEDURE ListBootInit ; Tool $1C,$01;
|
||||
PROCEDURE ListStartup ; Tool $1C,$02;
|
||||
PROCEDURE ListShutDown ; Tool $1C,$03;
|
||||
FUNCTION ListVersion : Integer ; Tool $1C,$04;
|
||||
PROCEDURE ListReset ; Tool $1C,$05;
|
||||
FUNCTION ListStatus : Boolean ; Tool $1C,$06;
|
||||
FUNCTION CreateList ( theWindowPtr:WindowPtr; U__listRecPtr:ListRecPtr) :
|
||||
ListCtlRecHndl ; Tool $1C,$09;
|
||||
PROCEDURE DrawMember ( memberPtr:MemRecPtr; U__listRecPtr:ListRecPtr) ; Tool
|
||||
$1C,$0C;
|
||||
FUNCTION GetListDefProc : LongProcPtr ; Tool $1C,$0E;
|
||||
PROCEDURE NewList ( memberPtr:MemRecPtr; U__listRecPtr:ListRecPtr) ; Tool
|
||||
$1C,$10;
|
||||
FUNCTION NextMember ( memberPtr:MemRecPtr; U__listRecPtr:ListRecPtr) :
|
||||
MemRecPtr ; Tool $1C,$0B;
|
||||
FUNCTION ResetMember ( U__listRecPtr:ListRecPtr) : MemRecPtr ; Tool $1C,$0F;
|
||||
PROCEDURE SelectMember ( memberPtr:MemRecPtr; U__listRecPtr:ListRecPtr) ; Tool
|
||||
$1C,$0D;
|
||||
PROCEDURE SortList ( comparePtr:VoidProcPtr; U__listRecPtr:ListRecPtr) ; Tool
|
||||
$1C,$0A;
|
||||
PROCEDURE DrawMember2 ( itemNumber:Integer; ctlHandle:CtlRecHndl) ; Tool
|
||||
$1C,$11;
|
||||
FUNCTION NextMember2 ( itemNumber:Integer; ctlHandle:CtlRecHndl) : Integer ;
|
||||
Tool $1C,$12;
|
||||
FUNCTION ResetMember2 ( ctlHandle:CtlRecHndl) : Integer ; Tool $1C,$13;
|
||||
PROCEDURE SelectMember2 ( itemNumber:Integer; ctlHandle:CtlRecHndl) ; Tool
|
||||
$1C,$14;
|
||||
PROCEDURE SortList2 ( comparePtr:Ptr; ctlHandle:CtlRecHndl) ; Tool $1C,$15;
|
||||
PROCEDURE NewList2 ( drawProcPtr:ProcPtr; listStart:Integer; listRef:Ref;
|
||||
listRefDesc:RefDescriptor; listSize:Integer; ctlHandle:CtlRecHndl) ; Tool
|
||||
$1C,$16;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,87 @@
|
|||
{********************************************
|
||||
; File: Loader.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT LOADER;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
CONST
|
||||
idNotFound = $1101; {error - segment/application/entry not found }
|
||||
idNotLoadFile = $1104; {error - file is not a load file }
|
||||
idBusyErr = $1105; {error - system loader is busy }
|
||||
idFilVersErr = $1107; {error - file version error }
|
||||
idUserIDErr = $1108; {error - user ID error }
|
||||
idSequenceErr = $1109; {error - segnum out of sequence }
|
||||
idBadRecordErr = $110A; {error - illegal load record found }
|
||||
idForeignSegErr = $110B; {error - segment is foreign }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
TYPE
|
||||
InitialLoadOutputRecPtr = ^InitialLoadOutputRec;
|
||||
InitialLoadOutputRec = RECORD
|
||||
userID : Integer;
|
||||
startAddr : Ptr;
|
||||
dPageAddr : Integer;
|
||||
buffSize : Integer;
|
||||
END;
|
||||
RestartOutRecPtr = ^RestartOutRec;
|
||||
RestartOutRec = RECORD
|
||||
userID : Integer;
|
||||
startAddr : Ptr;
|
||||
dPageAddr : Integer;
|
||||
buffSize : Integer;
|
||||
END;
|
||||
LoadSegNameOutPtr = ^LoadSegNameOut;
|
||||
LoadSegNameOut = RECORD
|
||||
segAddr : Ptr;
|
||||
fileNum : Integer;
|
||||
segNum : Integer;
|
||||
END;
|
||||
UnloadSegOutRecPtr = ^UnloadSegOutRec;
|
||||
UnloadSegOutRec = RECORD
|
||||
userID : Integer;
|
||||
fileNum : Integer;
|
||||
segNum : Integer;
|
||||
END;
|
||||
PROCEDURE LoaderInitialization ; Tool $11,$01;
|
||||
PROCEDURE LoaderStartUp ; Tool $11,$02;
|
||||
PROCEDURE LoaderShutDown ; Tool $11,$03;
|
||||
FUNCTION LoaderVersion : Integer ; Tool $11,$04;
|
||||
PROCEDURE LoaderReset ; Tool $11,$05;
|
||||
FUNCTION LoaderStatus : Boolean ; Tool $11,$06;
|
||||
PROCEDURE GetLoadSegInfo ( userID:Integer; loadFileNum:Integer;
|
||||
loadSegNum:Integer; bufferPtr:Ptr) ; Tool $11,$0F;
|
||||
FUNCTION GetUserID ( pathNamePtr:Ptr) : Integer ; Tool $11,$10;
|
||||
FUNCTION GetUserID2 ( pathNamePtr:Ptr) : Integer ; Tool $11,$21;
|
||||
FUNCTION InitialLoad ( userID:Integer; loadFileNamePtr:Ptr; spMemFlag:Boolean)
|
||||
: InitialLoadOutputRec ; EXTERNAL ;
|
||||
FUNCTION InitialLoad2 ( userID:Integer; loadFileNamePtr:Ptr; spMemFlag:Boolean;
|
||||
inputType:Integer) : InitialLoadOutputRec ; EXTERNAL ;
|
||||
FUNCTION LGetPathname ( userID:Integer; fileNumber:Integer) : Ptr ; Tool
|
||||
$11,$11;
|
||||
FUNCTION LGetPathname2 ( userID:Integer; fileNumber:Integer) : Ptr ; Tool
|
||||
$11,$22;
|
||||
FUNCTION GetPathname ( userID:Integer; fileNumber:Integer) : Ptr ; Tool
|
||||
$11,$11;
|
||||
FUNCTION GetPathname2 ( userID:Integer; fileNumber:Integer) : Ptr ; Tool
|
||||
$11,$22;
|
||||
PROCEDURE RenamePathname ( oldPathname:Ptr; newPathname:Ptr) ; Tool $11,$13;
|
||||
FUNCTION LoadSegName ( userID:Integer; loadFileNamePtr:Ptr; loadSegNamePtr:Ptr)
|
||||
: LoadSegNameOut ; EXTERNAL ;
|
||||
FUNCTION LoadSegNum ( userID:Integer; loadFileNum:Integer; loadSegNum:Integer)
|
||||
: Ptr ; Tool $11,$0B;
|
||||
FUNCTION Restart ( userID:Integer) : RestartOutRec ; EXTERNAL ;
|
||||
FUNCTION UnloadSeg ( segmentPtr:Ptr) : UnloadSegOutRec ; EXTERNAL ;
|
||||
PROCEDURE UnloadSegNum ( userID:Integer; loadFileNum:Integer;
|
||||
loadSegNum:Integer) ; Tool $11,$0C;
|
||||
FUNCTION UserShutDown ( userID:Integer; restartFlag:Integer) : Integer ; Tool
|
||||
$11,$12;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,87 @@
|
|||
{********************************************
|
||||
; File: Locator.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT LOCATOR;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
toolNotFoundErr = $0001; {error - }
|
||||
funcNotFoundErr = $0002; {error - }
|
||||
toolVersionErr = $0110; {error - }
|
||||
sysStrtMtErr = $0100; {error - can't mount system startup volume }
|
||||
messNotFoundErr = $0111; {error - }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
fileInfoType = $0001; {MessageCenter - Message type parameter }
|
||||
addMessage = $0001; {MessageCenter - action parameter }
|
||||
getMessage = $0002; {MessageCenter - action parameter }
|
||||
deleteMessage = $0003; {MessageCenter - action parameter }
|
||||
mvReturn = $0001; {TLMountVolume - like ok for dialogs }
|
||||
mvEscape = $0002; {TLMountVolume - like cancel for dialogs }
|
||||
sysTool = $0000; {Tool Set Spec - }
|
||||
userTool = $8000; {Tool Set Spec - }
|
||||
|
||||
TYPE
|
||||
MessageRecHndl = ^MessageRecPtr;
|
||||
MessageRecPtr = ^MessageRec;
|
||||
MessageRec = RECORD
|
||||
messageNext : MessageRecHndl;
|
||||
messageType : Integer;
|
||||
messageData : Integer;
|
||||
fileNames : PACKED ARRAY[1..1] OF Str255;
|
||||
END;
|
||||
ToolSpec = RECORD
|
||||
toolNumber : Integer;
|
||||
minVersion : Integer;
|
||||
END;
|
||||
StartStopRecordPtr = ^StartStopRecord;
|
||||
StartStopRecord = RECORD
|
||||
flags : Integer;
|
||||
videoMode : Integer;
|
||||
resFileID : Integer;
|
||||
dPageHandle : Handle;
|
||||
numTools : Integer;
|
||||
END;
|
||||
PROCEDURE TLBootInit ; Tool $01,$01;
|
||||
PROCEDURE TLStartUp ; Tool $01,$02;
|
||||
PROCEDURE TLShutDown ; Tool $01,$03;
|
||||
FUNCTION TLVersion : Integer ; Tool $01,$04;
|
||||
PROCEDURE TLReset ; Tool $01,$05;
|
||||
FUNCTION TLStatus : Boolean ; Tool $01,$06;
|
||||
FUNCTION GetFuncPtr ( userOrSystem:Integer; funcTSNum:Integer) : Ptr ; Tool
|
||||
$01,$0B;
|
||||
FUNCTION GetTSPtr ( userOrSystem:Integer; tSNum:Integer) : Ptr ; Tool $01,$09;
|
||||
FUNCTION GetWAP ( userOrSystem:Integer; tSNum:Integer) : Ptr ; Tool $01,$0C;
|
||||
PROCEDURE LoadOneTool ( toolNumber:Integer; minVersion:Integer) ; Tool
|
||||
$01,$0F;
|
||||
PROCEDURE LoadTools ( toolTablePtr:Ptr) ; Tool $01,$0E;
|
||||
PROCEDURE MessageCenter ( action:Integer; messagetype:Integer;
|
||||
messageHandle:MessageRecHndl) ; Tool $01,$15;
|
||||
PROCEDURE RestoreTextState ( stateHandle:Handle) ; Tool $01,$14;
|
||||
FUNCTION SaveTextState : Handle ; Tool $01,$13;
|
||||
PROCEDURE SetDefaultTPT ; Tool $01,$16;
|
||||
PROCEDURE SetTSPtr ( userOrSystem:Integer; tsNum:Integer; fptablePtr:FPTPtr) ;
|
||||
Tool $01,$0A;
|
||||
PROCEDURE SetWAP ( userOrSystem:Integer; tSNum:Integer; waptPtr:Ptr) ; Tool
|
||||
$01,$0D;
|
||||
FUNCTION TLMountVolume ( whereX:Integer; whereY:Integer; line1:Str255;
|
||||
line2:Str255; but1:Str255; but2:Str255) : Integer ; Tool $01,$11;
|
||||
FUNCTION TLTextMountVolume ( line1:Str255; line2:Str255; but1:Str255;
|
||||
but2:Str255) : Integer ; Tool $01,$12;
|
||||
PROCEDURE UnloadOneTool ( toolNumber:Integer) ; Tool $01,$10;
|
||||
FUNCTION StartUpTools ( userID:Integer; startStopRefDesc:RefDescriptor;
|
||||
startStopRef:Ref) : Ref ; Tool $01,$18;
|
||||
PROCEDURE ShutDownTools ( startStopDesc:RefDescriptor; startStopRef:Ref) ;
|
||||
Tool $01,$19;
|
||||
FUNCTION MessageByName ( createItFlag:Boolean; recordPtr:Ptr) : Longint ; Tool
|
||||
$01,$17;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,80 @@
|
|||
{********************************************
|
||||
; File: Memory.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT MEMORY;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
memErr = $0201; {error - unable to allocate block }
|
||||
emptyErr = $0202; {error - illegal operation, empty handle }
|
||||
notEmptyErr = $0203; {error - an empty handle was expected for this operation }
|
||||
lockErr = $0204; {error - illegal operation on a locked block }
|
||||
purgeErr = $0205; {error - attempt to purge an unpurgable block }
|
||||
handleErr = $0206; {error - an invalid handle was given }
|
||||
idErr = $0207; {error - an invalid owner ID was given }
|
||||
attrErr = $0208; {error - operation illegal on block with given attributes }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
attrNoPurge = $0000; {Handle Attribute Bits - Not purgeable }
|
||||
attrBank = $0001; {Handle Attribute Bits - fixed bank }
|
||||
attrAddr = $0002; {Handle Attribute Bits - fixed address }
|
||||
attrPage = $0004; {Handle Attribute Bits - page aligned }
|
||||
attrNoSpec = $0008; {Handle Attribute Bits - may not use special memory }
|
||||
attrNoCross = $0010; {Handle Attribute Bits - may not cross banks }
|
||||
attrPurge1 = $0100; {Handle Attribute Bits - Purge level 1 }
|
||||
attrPurge2 = $0200; {Handle Attribute Bits - Purge level 2 }
|
||||
attrPurge3 = $0300; {Handle Attribute Bits - Purge level 3 }
|
||||
attrPurge = $0300; {Handle Attribute Bits - test or set both purge bits }
|
||||
attrHandle = $1000; {Handle Attribute Bits - block of master pointers }
|
||||
attrSystem = $2000; {Handle Attribute Bits - system handle }
|
||||
attrFixed = $4000; {Handle Attribute Bits - not movable }
|
||||
attrLocked = $8000; {Handle Attribute Bits - locked }
|
||||
PROCEDURE MMBootInit ; Tool $02,$01;
|
||||
FUNCTION MMStartUp : Integer ; Tool $02,$02;
|
||||
PROCEDURE MMShutDown ( userID:Integer) ; Tool $02,$03;
|
||||
FUNCTION MMVersion : Integer ; Tool $02,$04;
|
||||
PROCEDURE MMReset ; Tool $02,$05;
|
||||
FUNCTION MMStatus : Boolean ; Tool $02,$06;
|
||||
PROCEDURE BlockMove ( srcPtr:Ptr; dstPtr:Ptr; count:Longint) ; Tool $02,$2B;
|
||||
PROCEDURE CheckHandle ( theHandle:Handle) ; Tool $02,$1E;
|
||||
PROCEDURE CompactMem ; Tool $02,$1F;
|
||||
PROCEDURE DisposeAll ( userID:Integer) ; Tool $02,$11;
|
||||
PROCEDURE DisposeHandle ( theHandle:Handle) ; Tool $02,$10;
|
||||
FUNCTION FindHandle ( locationPtr:Ptr) : Handle ; Tool $02,$1A;
|
||||
FUNCTION FreeMem : Longint ; Tool $02,$1B;
|
||||
FUNCTION GetHandleSize ( theHandle:Handle) : Longint ; Tool $02,$18;
|
||||
PROCEDURE HandToHand ( sourceHandle:Handle; destHandle:Handle; count:Longint)
|
||||
; Tool $02,$2A;
|
||||
PROCEDURE HandToPtr ( sourceHandle:Handle; destPtr:Ptr; count:Longint) ; Tool
|
||||
$02,$29;
|
||||
PROCEDURE HLock ( theHandle:Handle) ; Tool $02,$20;
|
||||
PROCEDURE HLockAll ( userID:Integer) ; Tool $02,$21;
|
||||
PROCEDURE HUnlock ( theHandle:Handle) ; Tool $02,$22;
|
||||
PROCEDURE HUnlockAll ( userID:Integer) ; Tool $02,$23;
|
||||
FUNCTION MaxBlock : Longint ; Tool $02,$1C;
|
||||
FUNCTION NewHandle ( blockSize:Longint; userID:Integer; attributes:Integer;
|
||||
locationPtr:Ptr) : Handle ; Tool $02,$09;
|
||||
PROCEDURE PtrToHand ( sourcePtr:Ptr; destHandle:Handle; count:Longint) ; Tool
|
||||
$02,$28;
|
||||
PROCEDURE PurgeAll ( userID:Integer) ; Tool $02,$13;
|
||||
PROCEDURE PurgeHandle ( theHandle:Handle) ; Tool $02,$12;
|
||||
FUNCTION RealFreeMem : Longint ; Tool $02,$2F;
|
||||
PROCEDURE ReallocHandle ( blockSize:Longint; userID:Integer;
|
||||
attributes:Integer; locationPtr:Ptr; theHandle:Handle) ; Tool $02,$0A;
|
||||
PROCEDURE RestoreHandle ( theHandle:Handle) ; Tool $02,$0B;
|
||||
PROCEDURE SetHandleSize ( newSize:Longint; theHandle:Handle) ; Tool $02,$19;
|
||||
PROCEDURE SetPurge ( newPurgeLevel:Integer; theHandle:Handle) ; Tool $02,$24;
|
||||
PROCEDURE SetPurgeAll ( newPurgeLevel:Integer; userID:Integer) ; Tool $02,$25;
|
||||
FUNCTION TotalMem : Longint ; Tool $02,$1D;
|
||||
PROCEDURE AddToOOMQueue ( headerPtr:Ptr) ; Tool $02,$0C;
|
||||
PROCEDURE DeleteFromOOMQueue ( headerPtr:Ptr) ; Tool $02,$0D;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,142 @@
|
|||
{********************************************
|
||||
; File: Menus.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT MENUS;
|
||||
INTERFACE
|
||||
USES TYPES,QUICKDRAW,EVENTS,CONTROLS,WINDOWS;
|
||||
CONST
|
||||
|
||||
mDrawMsg = $0000; {MenuDefProcCodes - }
|
||||
mChooseMsg = $0001; {MenuDefProcCodes - }
|
||||
mSizeMsg = $0002; {MenuDefProcCodes - }
|
||||
mDrawTitle = $0003; {MenuDefProcCodes - }
|
||||
mDrawMItem = $0004; {MenuDefProcCodes - }
|
||||
mGetMItemID = $0005; {MenuDefProcCodes - }
|
||||
mInvis = $0004; {MenuFlag - }
|
||||
mCustom = $0010; {MenuFlag - }
|
||||
mXor = $0020; {MenuFlag - }
|
||||
mSelected = $0040; {MenuFlag - }
|
||||
mDisabled = $0080; {MenuFlag - }
|
||||
customMenu = $0010; {MenuFlagMasks - }
|
||||
xorMItemHilite = $0020; {MenuFlagMasks - }
|
||||
xorTitleHilite = $0020; {MenuFlagMasks - }
|
||||
underMItem = $0040; {MenuFlagMasks - }
|
||||
disableItem = $0080; {MenuFlagMasks - }
|
||||
disableMenu = $0080; {MenuFlagMasks - }
|
||||
enableItem = $FF7F; {MenuFlagMasks - }
|
||||
enableMenu = $FF7F; {MenuFlagMasks - }
|
||||
noUnderMItem = $FFBF; {MenuFlagMasks - }
|
||||
colorMItemHilite = $FFDF; {MenuFlagMasks - }
|
||||
colorTitleHilite = $FFDF; {MenuFlagMasks - }
|
||||
colorReplace = $FFDF; {MenuFlagMasks - }
|
||||
standardMenu = $FFEF; {MenuFlagMasks - }
|
||||
|
||||
TYPE
|
||||
MenuBarRecHndl = ^MenuBarRecPtr;
|
||||
MenuBarRecPtr = ^MenuBarRec;
|
||||
MenuBarRec = CtlRec ;
|
||||
MenuRecHndl = ^MenuRecPtr;
|
||||
MenuRecPtr = ^MenuRec;
|
||||
MenuRec = PACKED RECORD
|
||||
menuID : Integer; { Menu's ID number }
|
||||
menuWidth : Integer; { Width of menu }
|
||||
menuHeight : Integer; { Height of menu }
|
||||
menuProc : WordProcPtr; { Menu's definition procedure }
|
||||
menuFlag : Integer; { Bit flags }
|
||||
firstItem : Byte;
|
||||
numOfItems : Byte;
|
||||
titleWidth : Integer; { Width of menu's title }
|
||||
titleName : Ptr;
|
||||
END;
|
||||
PROCEDURE MenuBootInit ; Tool $0F,$01;
|
||||
PROCEDURE MenuStartUp ( userID:Integer; dPageAddr:Integer) ; Tool $0F,$02;
|
||||
PROCEDURE MenuShutDown ; Tool $0F,$03;
|
||||
FUNCTION MenuVersion : Integer ; Tool $0F,$04;
|
||||
PROCEDURE MenuReset ; Tool $0F,$05;
|
||||
FUNCTION MenuStatus : Boolean ; Tool $0F,$06;
|
||||
PROCEDURE CalcMenuSize ( newWidth:Integer; newHeight:Integer; menuNum:Integer)
|
||||
; Tool $0F,$1C;
|
||||
PROCEDURE CheckMItem ( checkedFlag:Boolean; itemNum:Integer) ; Tool $0F,$32;
|
||||
FUNCTION CountMItems ( menuNum:Integer) : Integer ; Tool $0F,$14;
|
||||
PROCEDURE DeleteMenu ( menuNum:Integer) ; Tool $0F,$0E;
|
||||
PROCEDURE DeleteMItem ( itemNum:Integer) ; Tool $0F,$10;
|
||||
PROCEDURE DisableMItem ( itemNum:Integer) ; Tool $0F,$31;
|
||||
PROCEDURE DisposeMenu ( menuHandle:MenuRecHndl) ; Tool $0F,$2E;
|
||||
PROCEDURE DrawMenuBar ; Tool $0F,$2A;
|
||||
PROCEDURE EnableMItem ( itemNum:Integer) ; Tool $0F,$30;
|
||||
FUNCTION FixMenuBar : Integer ; Tool $0F,$13;
|
||||
PROCEDURE FlashMenuBar ; Tool $0F,$0C;
|
||||
FUNCTION GetBarColors : Longint ; Tool $0F,$18;
|
||||
FUNCTION GetMenuBar : MenuBarRecHndl ; Tool $0F,$0A;
|
||||
FUNCTION GetMenuFlag ( menuNum:Integer) : Integer ; Tool $0F,$20;
|
||||
FUNCTION GetMenuMgrPort : GrafPortPtr ; Tool $0F,$1B;
|
||||
FUNCTION GetMenuTitle ( menuNum:Integer) : Ptr ; Tool $0F,$22;
|
||||
FUNCTION GetMHandle ( menuNum:Integer) : MenuRecHndl ; Tool $0F,$16;
|
||||
FUNCTION GetMItem ( itemNum:Integer) : StringPtr ; Tool $0F,$25;
|
||||
FUNCTION GetMItemFlag ( itemNum:Integer) : Integer ; Tool $0F,$27;
|
||||
FUNCTION GetMItemMark ( itemNum:Integer) : Integer ; Tool $0F,$34;
|
||||
FUNCTION GetMItemStyle ( itemNum:Integer) : TextStyle ; Tool $0F,$36;
|
||||
FUNCTION GetMTitleStart : Integer ; Tool $0F,$1A;
|
||||
FUNCTION GetMTitleWidth ( menuNum:Integer) : Integer ; Tool $0F,$1E;
|
||||
FUNCTION GetSysBar : MenuBarRecHndl ; Tool $0F,$11;
|
||||
PROCEDURE HiliteMenu ( hiliteFlag:Boolean; menuNum:Integer) ; Tool $0F,$2C;
|
||||
PROCEDURE InitPalette ; Tool $0F,$2F;
|
||||
PROCEDURE InsertMenu ( addMenuHandle:MenuRecHndl; insertAfter:Integer) ; Tool
|
||||
$0F,$0D;
|
||||
PROCEDURE InsertMItem ( addItemPtr:Ptr; insertAfter:Integer; menuNum:Integer)
|
||||
; Tool $0F,$0F;
|
||||
FUNCTION MenuGlobal ( menuGlobalMask:Integer) : Integer ; Tool $0F,$23;
|
||||
PROCEDURE MenuKey ( taskRecPtr:WmTaskRec; barHandle:MenuBarRecHndl) ; Tool
|
||||
$0F,$09;
|
||||
PROCEDURE MenuNewRes ; Tool $0F,$29;
|
||||
PROCEDURE MenuRefresh ( redrawRoutinePtr:VoidProcPtr) ; Tool $0F,$0B;
|
||||
PROCEDURE MenuSelect ( taskRecPtr:WmTaskRec; barHandle:MenuBarRecHndl) ; Tool
|
||||
$0F,$2B;
|
||||
FUNCTION NewMenu ( menuStringPtr:Ptr) : MenuRecHndl ; Tool $0F,$2D;
|
||||
FUNCTION NewMenuBar ( theWindowPtr:WindowPtr) : MenuBarRecHndl ; Tool $0F,$15;
|
||||
PROCEDURE SetBarColors ( newBarColor:Integer; newInvertColor:Integer;
|
||||
newOutColor:Integer) ; Tool $0F,$17;
|
||||
PROCEDURE SetMenuBar ( barHandle:MenuBarRecHndl) ; Tool $0F,$39;
|
||||
PROCEDURE SetMenuFlag ( newValue:Integer; menuNum:Integer) ; Tool $0F,$1F;
|
||||
PROCEDURE SetMenuID ( newMenuNum:Integer; curMenuNum:Integer) ; Tool $0F,$37;
|
||||
PROCEDURE SetMenuTitle ( newStr:Str255; menuNum:Integer) ; Tool $0F,$21;
|
||||
PROCEDURE SetMItem ( newItemLine:Str255; itemNum:Integer) ; Tool $0F,$24;
|
||||
PROCEDURE SetMItemBlink ( count:Integer) ; Tool $0F,$28;
|
||||
PROCEDURE SetMItemFlag ( newValue:Integer; itemNum:Integer) ; Tool $0F,$26;
|
||||
PROCEDURE SetMItemID ( newItemNum:Integer; curItemNum:Integer) ; Tool $0F,$38;
|
||||
PROCEDURE SetMItemMark ( mark:Integer; itemNum:Integer) ; Tool $0F,$33;
|
||||
PROCEDURE SetMItemName ( str:Str255; itemNum:Integer) ; Tool $0F,$3A;
|
||||
PROCEDURE SetMItemStyle ( theTextStyle:TextStyle; itemNum:Integer) ; Tool
|
||||
$0F,$35;
|
||||
PROCEDURE SetMTitleStart ( xStart:Integer) ; Tool $0F,$19;
|
||||
PROCEDURE SetMTitleWidth ( newWidth:Integer; menuNum:Integer) ; Tool $0F,$1D;
|
||||
PROCEDURE SetSysBar ( barHandle:MenuBarRecHndl) ; Tool $0F,$12;
|
||||
FUNCTION PopUpMenuSelect ( selection:Integer; currentLeft:Integer;
|
||||
currentTop:Integer; flag:Integer; menuHandle:MenuRecHndl) : Integer ; Tool
|
||||
$0F,$3C;
|
||||
FUNCTION GetPopUpDefProc : Ptr ; Tool $0F,$3B;
|
||||
PROCEDURE DrawPopUp ( selection:Integer; flag:Integer; right:Integer;
|
||||
bottom:Integer; left:Integer; top:Integer; menuHandle:MenuRecHndl) ; Tool
|
||||
$0F,$3D;
|
||||
FUNCTION NewMenuBar2 ( refDesc:RefDescriptor; menuBarTemplateRef:Ref;
|
||||
windowPortPtr:GrafPortPtr) : MenuBarRecHndl ; Tool $0F,$43;
|
||||
FUNCTION NewMenu2 ( refDesc:RefDescriptor; menuTemplateRef:Ref) : MenuRecHndl ;
|
||||
Tool $0F,$3E;
|
||||
PROCEDURE InsertMItem2 ( refDesc:RefDescriptor; menuTemplateRef:Ref;
|
||||
insertAfter:Integer; menuNum:Integer) ; Tool $0F,$3F;
|
||||
PROCEDURE SetMenuTitle2 ( refDesc:RefDescriptor; titleRef:Ref; menuNum:Integer)
|
||||
; Tool $0F,$40;
|
||||
PROCEDURE SetMItem2 ( refDesc:RefDescriptor; menuItemTempRef:Ref;
|
||||
menuItemID:Integer) ; Tool $0F,$41;
|
||||
PROCEDURE SetMItemName2 ( refDesc:RefDescriptor; titleRef:Ref;
|
||||
menuItemID:Integer) ; Tool $0F,$42;
|
||||
PROCEDURE HideMenuBar ; Tool $0F,$45;
|
||||
PROCEDURE ShowMenuBar ; Tool $0F,$46;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,119 @@
|
|||
{********************************************
|
||||
; File: MIDI.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT MIDI;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
miToolNum = $0020; {Midi - the tool number of the MIDI Tool Set }
|
||||
miDrvrFileType = $00BB; {Midi - filetype of MIDI device driver }
|
||||
miNSVer = $0102; {Midi - minimum version of Note Synthesizer required by MIDI
|
||||
Tool Set }
|
||||
miSTVer = $0203; {Midi - minimum version of Sound Tools needed by MIDI Tool Set
|
||||
}
|
||||
miDrvrAuxType = $0300; {Midi - aux type of MIDI device driver }
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
miStartUpErr = $2000; {Midi - MIDI Tool Set is not started }
|
||||
miPacketErr = $2001; {Midi - incorrect length for a received MIDI command }
|
||||
miArrayErr = $2002; {Midi - a designated array had an insufficient or illegal
|
||||
size }
|
||||
miFullBufErr = $2003; {Midi - input buffer overflow }
|
||||
miToolsErr = $2004; {Midi - the required tools were not started up or had
|
||||
insufficient versions }
|
||||
miOutOffErr = $2005; {Midi - MIDI output must first be enabled }
|
||||
miNoBufErr = $2007; {Midi - no buffer is currently allocated }
|
||||
miDriverErr = $2008; {Midi - the designated file is not a legal MIDI device
|
||||
driver }
|
||||
miBadFreqErr = $2009; {Midi - the MIDI clock cannot attain the requested
|
||||
frequency }
|
||||
miClockErr = $200A; {Midi - the MIDI clock value wrapped to zero }
|
||||
miConflictErr = $200B; {Midi - conflicting processes for MIDI input }
|
||||
miNoDevErr = $200C; {Midi - no MIDI device driver loaded }
|
||||
miDevNotAvail = $2080; {Midi - the requested device is not available }
|
||||
miDevSlotBusy = $2081; {Midi - requested slot is already in use }
|
||||
miDevBusy = $2082; {Midi - the requested device is already in use }
|
||||
miDevOverrun = $2083; {Midi - device overrun by incoming MIDI data }
|
||||
miDevNoConnect = $2084; {Midi - no connection to MIDI }
|
||||
miDevReadErr = $2085; {Midi - framing error in received MIDI data }
|
||||
miDevVersion = $2086; {Midi - ROM version is incompatible with device driver }
|
||||
miDevIntHndlr = $2087; {Midi - conflicting interrupt handler is installed }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
miSetClock = $0000; {MidiClock - set time stamp clock }
|
||||
miStartClock = $0001; {MidiClock - start time stamp clock }
|
||||
miStopClock = $0002; {MidiClock - stop time stamp clock }
|
||||
miSetFreq = $0003; {MidiClock - set clock frequency }
|
||||
miRawMode = $00000000; {MidiControl - raw mode for MIDI input and output }
|
||||
miSetRTVec = $0000; {MidiControl - set real-time message vector }
|
||||
miPacketMode = $00000001; {MidiControl - packet mode for MIDI input and output
|
||||
}
|
||||
miSetErrVec = $0001; {MidiControl - set real-time error vector }
|
||||
miStandardMode = $00000002; {MidiControl - standard mode for MIDI input and
|
||||
output }
|
||||
miSetInBuf = $0002; {MidiControl - set input buffer information }
|
||||
miSetOutBuf = $0003; {MidiControl - set output buffer information }
|
||||
miStartInput = $0004; {MidiControl - start MIDI input }
|
||||
miStartOutput = $0005; {MidiControl - start MIDI output }
|
||||
miStopInput = $0006; {MidiControl - stop MIDI input }
|
||||
miStopOutput = $0007; {MidiControl - stop MIDI output }
|
||||
miFlushInput = $0008; {MidiControl - discard contents of input buffer }
|
||||
miFlushOutput = $0009; {MidiControl - discard contents of output buffer }
|
||||
miFlushPacket = $000A; {MidiControl - discard next input packet }
|
||||
miWaitOutput = $000B; {MidiControl - wait for output buffer to empty }
|
||||
miSetInMode = $000C; {MidiControl - set input mode }
|
||||
miSetOutMode = $000D; {MidiControl - set output mode }
|
||||
miClrNotePad = $000E; {MidiControl - clear all notes marked on in the note pad
|
||||
}
|
||||
miSetDelay = $000F; {MidiControl - set minimum delay between output packets }
|
||||
miOutputStat = $0010; {MidiControl - enable/disable output of running-status }
|
||||
miIgnoreSysEx = $0011; {MidiControl - ignore system exclusive input }
|
||||
miSelectDrvr = $0000; {MidiDevice - display device driver selection dialog }
|
||||
miLoadDrvr = $0001; {MidiDevice - load and initialize device driver }
|
||||
miUnloadDrvr = $0002; {MidiDevice - shutdown MIDI device, unload driver }
|
||||
miNextPktLen = $0; {MidiInfo - return length of next packet }
|
||||
miInputChars = $0001; {MidiInfo - return number of characters in input buffer }
|
||||
miOutputChars = $0002; {MidiInfo - return number of characters in output buffer
|
||||
}
|
||||
miMaxInChars = $0003; {MidiInfo - return maximum number of characters in input
|
||||
buffer }
|
||||
miMaxOutChars = $0004; {MidiInfo - return maximum number of characters in
|
||||
output buffer }
|
||||
miRecordAddr = $0005; {MidiInfo - return current MidiRecordSeq address }
|
||||
miPlayAddr = $0006; {MidiInfo - return current MidiPlaySeq address }
|
||||
miClockValue = $0007; {MidiInfo - return current time stamp clock value }
|
||||
miClockFreq = $0008; {MidiInfo - return number of clock ticks per second }
|
||||
|
||||
TYPE
|
||||
MiBufInfo = RECORD
|
||||
bufSize : Integer; { size of buffer (0 for default) }
|
||||
address : Ptr; { address of buffer (0 for auto-allocation) }
|
||||
END;
|
||||
MiDriverInfo = RECORD
|
||||
slot : Integer; { device slot }
|
||||
external : Integer; { slot internal (=0) / external (=1) }
|
||||
pathname : PACKED ARRAY[1..65] OF Byte; { device driver pathname }
|
||||
END;
|
||||
PROCEDURE MidiBootInit ; Tool $20,$01;
|
||||
PROCEDURE MidiStartUp ( userID:Integer; directPages:Integer) ; Tool $20,$02;
|
||||
PROCEDURE MidiShutDown ; Tool $20,$03;
|
||||
FUNCTION MidiVersion : Integer ; Tool $20,$04;
|
||||
PROCEDURE MidiReset ; Tool $20,$05;
|
||||
FUNCTION MidiStatus : Boolean ; Tool $20,$06;
|
||||
PROCEDURE MidiClock ( funcNum:Integer; arg:Longint) ; Tool $20,$0B;
|
||||
PROCEDURE MidiControl ( controlCode:Integer) ; Tool $20,$09;
|
||||
PROCEDURE MidiDevice ( funcNum:Integer; driverInfo:Ptr) ; Tool $20,$0A;
|
||||
FUNCTION MidiInfo ( funcNum:Integer) : Longint ; Tool $20,$0C;
|
||||
PROCEDURE MidiInputPoll ; EXTERNAL ;
|
||||
FUNCTION MidiReadPacket ( arrayAddr:Ptr; arraySize:Integer) : Integer ; Tool
|
||||
$20,$0D;
|
||||
FUNCTION MidiWritePacket ( arrayAddr:Ptr) : Integer ; Tool $20,$0E;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,367 @@
|
|||
{********************************************
|
||||
; File: MiscTool.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT MISCTOOL;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
CONST
|
||||
badInputErr = $0301; {error - bad input parameter }
|
||||
noDevParamErr = $0302; {error - no device for input parameter }
|
||||
taskInstlErr = $0303; {error - task already installed error }
|
||||
noSigTaskErr = $0304; {error - no signature in task header }
|
||||
queueDmgdErr = $0305; {error - queue has been damaged error }
|
||||
taskNtFdErr = $0306; {error - task was not found error }
|
||||
firmTaskErr = $0307; {error - firmware task was unsuccessful }
|
||||
hbQueueBadErr = $0308; {error - heartbeat queue damaged }
|
||||
unCnctdDevErr = $0309; {error - attempted to dispatch to unconnected device }
|
||||
idTagNtAvlErr = $030B; {error - ID tag not available }
|
||||
pdosUnClmdIntErr = $0001; {System Fail - ProDOS unclaimed interrupt error }
|
||||
divByZeroErr = $0004; {System Fail - divide by zero error }
|
||||
pdosVCBErr = $000A; {System Fail - ProDOS VCB unusable }
|
||||
pdosFCBErr = $000B; {System Fail - ProDOS FCB unusable }
|
||||
pdosBlk0Err = $000C; {System Fail - ProDOS block zero allocated illegally }
|
||||
pdosIntShdwErr = $000D; {System Fail - ProDOS interrupt w/ shadowing off }
|
||||
segLoader1Err = $0015; {System Fail - segment loader error }
|
||||
sPackage0Err = $0017; {System Fail - can't load a package }
|
||||
package1Err = $0018; {System Fail - can't load a package }
|
||||
package2Err = $0019; {System Fail - can't load a package }
|
||||
package3Err = $001A; {System Fail - can't load a package }
|
||||
package4Err = $001B; {System Fail - can't load a package }
|
||||
package5Err = $001C; {System Fail - can't load a package }
|
||||
package6Err = $001D; {System Fail - can't load a package }
|
||||
package7Err = $001E; {System Fail - can't load a package }
|
||||
package8Err = $0020; {System Fail - can't load a package }
|
||||
package9Err = $0021; {System Fail - can't load a package }
|
||||
package10Err = $0022; {System Fail - can't load a package }
|
||||
package11Err = $0023; {System Fail - can't load a package }
|
||||
package12Err = $0024; {System Fail - can't load a package }
|
||||
outOfMemErr = $0025; {System Fail - out of memory error }
|
||||
segLoader2Err = $0026; {System Fail - segment loader error }
|
||||
fMapTrshdErr = $0027; {System Fail - file map trashed }
|
||||
stkOvrFlwErr = $0028; {System Fail - stack overflow error }
|
||||
psInstDiskErr = $0030; {System Fail - Please Insert Disk (file manager alert) }
|
||||
memMgr1Err = $0032; {System Fail - memory manager error }
|
||||
memMgr2Err = $0033; {System Fail - memory manager error }
|
||||
memMgr3Err = $0034; {System Fail - memory manager error }
|
||||
memMgr4Err = $0035; {System Fail - memory manager error }
|
||||
memMgr5Err = $0036; {System Fail - memory manager error }
|
||||
memMgr6Err = $0037; {System Fail - memory manager error }
|
||||
memMgr7Err = $0038; {System Fail - memory manager error }
|
||||
memMgr8Err = $0039; {System Fail - memory manager error }
|
||||
memMgr9Err = $003A; {System Fail - memory manager error }
|
||||
memMgr10Err = $003B; {System Fail - memory manager error }
|
||||
memMgr11Err = $003C; {System Fail - memory manager error }
|
||||
memMgr12Err = $003D; {System Fail - memory manager error }
|
||||
memMgr13Err = $003E; {System Fail - memory manager error }
|
||||
memMgr14Err = $003F; {System Fail - memory manager error }
|
||||
memMgr15Err = $0040; {System Fail - memory manager error }
|
||||
memMgr16Err = $0041; {System Fail - memory manager error }
|
||||
memMgr17Err = $0042; {System Fail - memory manager error }
|
||||
memMgr18Err = $0043; {System Fail - memory manager error }
|
||||
memMgr19Err = $0044; {System Fail - memory manager error }
|
||||
memMgr20Err = $0045; {System Fail - memory manager error }
|
||||
memMgr21Err = $0046; {System Fail - memory manager error }
|
||||
memMgr22Err = $0047; {System Fail - memory manager error }
|
||||
memMgr23Err = $0048; {System Fail - memory manager error }
|
||||
memMgr24Err = $0049; {System Fail - memory manager error }
|
||||
memMgr25Err = $004A; {System Fail - memory manager error }
|
||||
memMgr26Err = $004B; {System Fail - memory manager error }
|
||||
memMgr27Err = $004C; {System Fail - memory manager error }
|
||||
memMgr28Err = $004D; {System Fail - memory manager error }
|
||||
memMgr29Err = $004E; {System Fail - memory manager error }
|
||||
memMgr30Err = $004F; {System Fail - memory manager error }
|
||||
memMgr31Err = $0050; {System Fail - memory manager error }
|
||||
memMgr32Err = $0051; {System Fail - memory manager error }
|
||||
memMgr33Err = $0052; {System Fail - memory manager error }
|
||||
memMgr34Err = $0053; {System Fail - memory manager error }
|
||||
stupVolMntErr = $0100; {System Fail - can't mount system startup volume }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
(* *** Reference Numbers ***
|
||||
p1PrntModem = $0000; {Battery Ram Parameter Ref Number - }
|
||||
p1LineLnth = $0001; {Battery Ram Parameter Ref Number - }
|
||||
p1DelLine = $0002; {Battery Ram Parameter Ref Number - }
|
||||
p1AddLine = $0003; {Battery Ram Parameter Ref Number - }
|
||||
p1Echo = $0004; {Battery Ram Parameter Ref Number - }
|
||||
p1Buffer = $0005; {Battery Ram Parameter Ref Number - }
|
||||
p1Baud = $0006; {Battery Ram Parameter Ref Number - }
|
||||
p1DtStpBits = $0007; {Battery Ram Parameter Ref Number - }
|
||||
p1Parity = $0008; {Battery Ram Parameter Ref Number - }
|
||||
p1DCDHndShk = $0009; {Battery Ram Parameter Ref Number - }
|
||||
p1DSRHndShk = $000A; {Battery Ram Parameter Ref Number - }
|
||||
p1XnfHndShk = $000B; {Battery Ram Parameter Ref Number - }
|
||||
p2PrntModem = $000C; {Battery Ram Parameter Ref Number - }
|
||||
p2LineLnth = $000D; {Battery Ram Parameter Ref Number - }
|
||||
p2DelLine = $000E; {Battery Ram Parameter Ref Number - }
|
||||
p2AddLine = $000F; {Battery Ram Parameter Ref Number - }
|
||||
p2Echo = $0010; {Battery Ram Parameter Ref Number - }
|
||||
p2Buffer = $0011; {Battery Ram Parameter Ref Number - }
|
||||
p2Baud = $0012; {Battery Ram Parameter Ref Number - }
|
||||
p2DtStpBits = $0013; {Battery Ram Parameter Ref Number - }
|
||||
p2Parity = $0014; {Battery Ram Parameter Ref Number - }
|
||||
p2DCDHndShk = $0015; {Battery Ram Parameter Ref Number - }
|
||||
p2DSRHndShk = $0016; {Battery Ram Parameter Ref Number - }
|
||||
p2XnfHndShk = $0017; {Battery Ram Parameter Ref Number - }
|
||||
dspColMono = $0018; {Battery Ram Parameter Ref Number - }
|
||||
dsp40or80 = $0019; {Battery Ram Parameter Ref Number - }
|
||||
dspTxtColor = $001A; {Battery Ram Parameter Ref Number - }
|
||||
dspBckColor = $001B; {Battery Ram Parameter Ref Number - }
|
||||
dspBrdColor = $001C; {Battery Ram Parameter Ref Number - }
|
||||
hrtz50or60 = $001D; {Battery Ram Parameter Ref Number - }
|
||||
userVolume = $001E; {Battery Ram Parameter Ref Number - }
|
||||
bellVolume = $001F; {Battery Ram Parameter Ref Number - }
|
||||
sysSpeed = $0020; {Battery Ram Parameter Ref Number - }
|
||||
slt1intExt = $0021; {Battery Ram Parameter Ref Number - }
|
||||
slt2intExt = $0022; {Battery Ram Parameter Ref Number - }
|
||||
slt3intExt = $0023; {Battery Ram Parameter Ref Number - }
|
||||
slt4intExt = $0024; {Battery Ram Parameter Ref Number - }
|
||||
slt5intExt = $0025; {Battery Ram Parameter Ref Number - }
|
||||
slt6intExt = $0026; {Battery Ram Parameter Ref Number - }
|
||||
slt7intExt = $0027; {Battery Ram Parameter Ref Number - }
|
||||
startupSlt = $0028; {Battery Ram Parameter Ref Number - }
|
||||
txtDspLang = $0029; {Battery Ram Parameter Ref Number - }
|
||||
kybdLang = $002A; {Battery Ram Parameter Ref Number - }
|
||||
kyBdBuffer = $002B; {Battery Ram Parameter Ref Number - }
|
||||
kyBdRepSpd = $002C; {Battery Ram Parameter Ref Number - }
|
||||
kyBdRepDel = $002D; {Battery Ram Parameter Ref Number - }
|
||||
dblClkTime = $002E; {Battery Ram Parameter Ref Number - }
|
||||
flashRate = $002F; {Battery Ram Parameter Ref Number - }
|
||||
shftCpsLCas = $0030; {Battery Ram Parameter Ref Number - }
|
||||
fstSpDelKey = $0031; {Battery Ram Parameter Ref Number - }
|
||||
dualSpeed = $0032; {Battery Ram Parameter Ref Number - }
|
||||
hiMouseRes = $0033; {Battery Ram Parameter Ref Number - }
|
||||
dateFormat = $0034; {Battery Ram Parameter Ref Number - }
|
||||
clockFormat = $0035; {Battery Ram Parameter Ref Number - }
|
||||
rdMinRam = $0036; {Battery Ram Parameter Ref Number - }
|
||||
rdMaxRam = $0037; {Battery Ram Parameter Ref Number - }
|
||||
langCount = $0038; {Battery Ram Parameter Ref Number - }
|
||||
lang1 = $0039; {Battery Ram Parameter Ref Number - }
|
||||
lang2 = $003A; {Battery Ram Parameter Ref Number - }
|
||||
lang3 = $003B; {Battery Ram Parameter Ref Number - }
|
||||
lang4 = $003C; {Battery Ram Parameter Ref Number - }
|
||||
lang5 = $003D; {Battery Ram Parameter Ref Number - }
|
||||
lang6 = $003E; {Battery Ram Parameter Ref Number - }
|
||||
lang7 = $003F; {Battery Ram Parameter Ref Number - }
|
||||
lang8 = $0040; {Battery Ram Parameter Ref Number - }
|
||||
layoutCount = $0041; {Battery Ram Parameter Ref Number - }
|
||||
layout1 = $0042; {Battery Ram Parameter Ref Number - }
|
||||
layout2 = $0043; {Battery Ram Parameter Ref Number - }
|
||||
layout3 = $0044; {Battery Ram Parameter Ref Number - }
|
||||
layout4 = $0045; {Battery Ram Parameter Ref Number - }
|
||||
layout5 = $0046; {Battery Ram Parameter Ref Number - }
|
||||
layout6 = $0047; {Battery Ram Parameter Ref Number - }
|
||||
layout7 = $0048; {Battery Ram Parameter Ref Number - }
|
||||
layout8 = $0049; {Battery Ram Parameter Ref Number - }
|
||||
layout9 = $004A; {Battery Ram Parameter Ref Number - }
|
||||
layout10 = $004B; {Battery Ram Parameter Ref Number - }
|
||||
layout11 = $004C; {Battery Ram Parameter Ref Number - }
|
||||
layout12 = $004D; {Battery Ram Parameter Ref Number - }
|
||||
layout13 = $004E; {Battery Ram Parameter Ref Number - }
|
||||
layout14 = $004F; {Battery Ram Parameter Ref Number - }
|
||||
layout15 = $0050; {Battery Ram Parameter Ref Number - }
|
||||
layout16 = $0051; {Battery Ram Parameter Ref Number - }
|
||||
aTalkNodeNo = $0080; {Battery Ram Parameter Ref Number - }
|
||||
|
||||
irqIntFlag = $0000; {GetAddr Param Ref No - }
|
||||
irqDataReg = $0001; {GetAddr Param Ref No - }
|
||||
irqSerial1 = $0002; {GetAddr Param Ref No - }
|
||||
irqSerial2 = $0003; {GetAddr Param Ref No - }
|
||||
irqAplTlkHi = $0004; {GetAddr Param Ref No - }
|
||||
tickCnt = $0005; {GetAddr Param Ref No - }
|
||||
irqVolume = $0006; {GetAddr Param Ref No - }
|
||||
irqActive = $0007; {GetAddr Param Ref No - }
|
||||
irqSndData = $0008; {GetAddr Param Ref No - }
|
||||
brkVar = $0009; {GetAddr Param Ref No - }
|
||||
evMgrData = $000A; {GetAddr Param Ref No - }
|
||||
mouseSlot = $000B; {GetAddr Param Ref No - }
|
||||
mouseClamps = $000C; {GetAddr Param Ref No - }
|
||||
absClamps = $000D; {GetAddr Param Ref No - }
|
||||
sccIntFlag = $000E; {GetAddr Param Ref No - }
|
||||
|
||||
extVGCInt = $01; {Hardware Interrupt Status - Returned by GetIRQEnable }
|
||||
scanLineInt = $02; {Hardware Interrupt Status - Returned by GetIRQEnable }
|
||||
adbDataInt = $04; {Hardware Interrupt Status - Returned by GetIRQEnable }
|
||||
ADTBDataInt = $04; {Hardware Interrupt Status - maintained for compatiblity
|
||||
with old interfaces }
|
||||
oneSecInt = $10; {Hardware Interrupt Status - Returned by GetIRQEnable }
|
||||
quartSecInt = $20; {Hardware Interrupt Status - Returned by GetIRQEnable }
|
||||
vbInt = $40; {Hardware Interrupt Status - Returned by GetIRQEnable }
|
||||
kbdInt = $80; {Hardware Interrupt Status - Returned by GetIRQEnable }
|
||||
|
||||
kybdEnable = $0000; {Interrupt Ref Number - Parameter to IntSource }
|
||||
kybdDisable = $0001; {Interrupt Ref Number - Parameter to IntSource }
|
||||
vblEnable = $0002; {Interrupt Ref Number - Parameter to IntSource }
|
||||
vblDisable = $0003; {Interrupt Ref Number - Parameter to IntSource }
|
||||
qSecEnable = $0004; {Interrupt Ref Number - Parameter to IntSource }
|
||||
qSecDisable = $0005; {Interrupt Ref Number - Parameter to IntSource }
|
||||
oSecEnable = $0006; {Interrupt Ref Number - Parameter to IntSource }
|
||||
oSecDisable = $0007; {Interrupt Ref Number - Parameter to IntSource }
|
||||
adbEnable = $000A; {Interrupt Ref Number - Parameter to IntSource }
|
||||
adbDisable = $000B; {Interrupt Ref Number - Parameter to IntSource }
|
||||
scLnEnable = $000C; {Interrupt Ref Number - Parameter to IntSource }
|
||||
scLnDisable = $000D; {Interrupt Ref Number - Parameter to IntSource }
|
||||
exVCGEnable = $000E; {Interrupt Ref Number - Parameter to IntSource }
|
||||
exVCGDisable = $000F; {Interrupt Ref Number - Parameter to IntSource }
|
||||
|
||||
mouseOff = $0000; {Mouse Mode Value - }
|
||||
transparent = $0001; {Mouse Mode Value - }
|
||||
transParnt = $0001; {Mouse Mode Value - (old name) }
|
||||
moveIntrpt = $0003; {Mouse Mode Value - }
|
||||
bttnIntrpt = $0005; {Mouse Mode Value - }
|
||||
bttnOrMove = $0007; {Mouse Mode Value - }
|
||||
mouseOffVI = $0008; {Mouse Mode Value - }
|
||||
transParntVI = $0009; {Mouse Mode Value - (old name) }
|
||||
transparentVI = $0009; {Mouse Mode Value - }
|
||||
moveIntrptVI = $000B; {Mouse Mode Value - }
|
||||
bttnIntrptVI = $000D; {Mouse Mode Value - }
|
||||
bttnOrMoveVI = $000F; {Mouse Mode Value - }
|
||||
|
||||
toolLoc1 = $0000; {Vector Ref Number - }
|
||||
toolLoc2 = $0001; {Vector Ref Number - }
|
||||
usrTLoc1 = $0002; {Vector Ref Number - }
|
||||
usrTLoc2 = $0003; {Vector Ref Number - }
|
||||
intrptMgr = $0004; {Vector Ref Number - }
|
||||
copMgr = $0005; {Vector Ref Number - }
|
||||
abortMgr = $0006; {Vector Ref Number - }
|
||||
U_sysFailMgr = $0007; {Vector Ref Number - }
|
||||
aTalkIntHnd = $0008; {Vector Ref Number - }
|
||||
sccIntHnd = $0009; {Vector Ref Number - }
|
||||
scLnIntHnd = $000A; {Vector Ref Number - }
|
||||
sndIntHnd = $000B; {Vector Ref Number - }
|
||||
vblIntHnd = $000C; {Vector Ref Number - }
|
||||
mouseIntHnd = $000D; {Vector Ref Number - }
|
||||
qSecIntHnd = $000E; {Vector Ref Number - }
|
||||
kybdIntHnd = $000F; {Vector Ref Number - }
|
||||
adbRBIHnd = $0010; {Vector Ref Number - }
|
||||
adbSRQHnd = $0011; {Vector Ref Number - }
|
||||
deskAccHnd = $0012; {Vector Ref Number - }
|
||||
flshBufHnd = $0013; {Vector Ref Number - }
|
||||
kybdMicHnd = $0014; {Vector Ref Number - }
|
||||
oneSecHnd = $0015; {Vector Ref Number - }
|
||||
extVCGHnd = $0016; {Vector Ref Number - }
|
||||
otherIntHnd = $0017; {Vector Ref Number - }
|
||||
crsrUpdtHnd = $0018; {Vector Ref Number - }
|
||||
incBsyFlag = $0019; {Vector Ref Number - }
|
||||
decBsyFlag = $001A; {Vector Ref Number - }
|
||||
bellVector = $001B; {Vector Ref Number - }
|
||||
breakVector = $001C; {Vector Ref Number - }
|
||||
traceVector = $001D; {Vector Ref Number - }
|
||||
stepVector = $001E; {Vector Ref Number - }
|
||||
ctlYVector = $0028; {Vector Ref Number - }
|
||||
proDOSVctr = $002A; {Vector Ref Number - }
|
||||
osVector = $002B; {Vector Ref Number - }
|
||||
msgPtrVctr = $002C; {Vector Ref Number - }
|
||||
*** Reference Numbers *** *)
|
||||
|
||||
|
||||
TYPE
|
||||
ClampRecHndl = ^ClampRecPtr;
|
||||
ClampRecPtr = ^ClampRec;
|
||||
ClampRec = RECORD
|
||||
yMaxClamp : Integer;
|
||||
yMinClamp : Integer;
|
||||
xMaxClamp : Integer;
|
||||
xMinClamp : Integer;
|
||||
END;
|
||||
FWRecHndl = ^FWRecPtr;
|
||||
FWRecPtr = ^FWRec;
|
||||
FWRec = RECORD
|
||||
yRegExit : Integer;
|
||||
xRegExit : Integer;
|
||||
aRegExit : Integer;
|
||||
status : Integer;
|
||||
END;
|
||||
MouseRecHndl = ^MouseRecPtr;
|
||||
MouseRecPtr = ^MouseRec;
|
||||
MouseRec = PACKED RECORD
|
||||
mouseMode : Byte;
|
||||
mouseStatus : Byte;
|
||||
yPos : Integer;
|
||||
xPos : Integer;
|
||||
END;
|
||||
InterruptStateRecHndl = ^InterruptStateRecPtr;
|
||||
InterruptStateRecPtr = ^InterruptStateRec;
|
||||
InterruptStateRec = PACKED RECORD
|
||||
irq_A : Integer;
|
||||
irq_X : Integer;
|
||||
irq_Y : Integer;
|
||||
irq_S : Integer;
|
||||
irq_D : Integer;
|
||||
irq_P : Byte;
|
||||
irq_DB : Byte;
|
||||
irq_e : Byte;
|
||||
irq_K : Byte;
|
||||
irq_PC : Integer;
|
||||
irq_state : Byte;
|
||||
irq_shadow : Integer;
|
||||
irq_mslot : Byte;
|
||||
END;
|
||||
PROCEDURE MTBootInit ; Tool $03,$01;
|
||||
PROCEDURE MTStartUp ; Tool $03,$02;
|
||||
PROCEDURE MTShutDown ; Tool $03,$03;
|
||||
FUNCTION MTVersion : Integer ; Tool $03,$04;
|
||||
PROCEDURE MTReset ; Tool $03,$05;
|
||||
FUNCTION MTStatus : Boolean ; Tool $03,$06;
|
||||
PROCEDURE ClampMouse ( xMinClamp:Integer; xMaxClamp:Integer; yMinClamp:Integer;
|
||||
yMaxClamp:Integer) ; Tool $03,$1C;
|
||||
PROCEDURE ClearMouse ; Tool $03,$1B;
|
||||
PROCEDURE ClrHeartBeat ; Tool $03,$14;
|
||||
PROCEDURE DeleteID ( idTag:Integer) ; Tool $03,$21;
|
||||
PROCEDURE DelHeartBeat ( taskPtr:Ptr) ; Tool $03,$13;
|
||||
FUNCTION FWEntry ( aRegValue:Integer; xRegValue:Integer; yRegValue:Integer;
|
||||
eModeEntryPt:Integer) : FWRec ; EXTERNAL ;
|
||||
FUNCTION GetAbsClamp : ClampRec ; EXTERNAL ;
|
||||
FUNCTION GetAddr ( refNum:Integer) : Ptr ; Tool $03,$16;
|
||||
FUNCTION GetIRQEnable : Integer ; Tool $03,$29;
|
||||
FUNCTION GetMouseClamp : ClampRec ; EXTERNAL ;
|
||||
FUNCTION GetNewID ( idTag:Integer) : Integer ; Tool $03,$20;
|
||||
FUNCTION GetTick : Longint ; Tool $03,$25;
|
||||
FUNCTION GetVector ( vectorRefNum:Integer) : Ptr ; Tool $03,$11;
|
||||
PROCEDURE HomeMouse ; Tool $03,$1A;
|
||||
PROCEDURE InitMouse ( mouseSlot:Integer) ; Tool $03,$18;
|
||||
PROCEDURE IntSource ( srcRefNum:Integer) ; Tool $03,$23;
|
||||
FUNCTION Munger ( destPtr:Ptr; destLenPtr:IntPtr; targPtr:Ptr; targLen:Integer;
|
||||
replPtr:Ptr; replLen:Integer; padPtr:Ptr) : Integer ; Tool $03,$28;
|
||||
FUNCTION PackBytes (VAR srcBuffer:Ptr;VAR srcSize:Integer; dstBuffer:Ptr;
|
||||
dstSize:Integer) : Integer ; Tool $03,$26;
|
||||
PROCEDURE PosMouse ( xPos:Integer; yPos:Integer) ; Tool $03,$1E;
|
||||
PROCEDURE ReadAsciiTime ( bufferPtr:Ptr) ; Tool $03,$0F;
|
||||
FUNCTION ReadBParam ( paramRefNum:Integer) : Integer ; Tool $03,$0C;
|
||||
PROCEDURE ReadBRam ( bufferPtr:Ptr) ; Tool $03,$0A;
|
||||
FUNCTION ReadMouse : MouseRec ; EXTERNAL ;
|
||||
FUNCTION ReadTimeHex : TimeRec ; EXTERNAL ;
|
||||
FUNCTION ServeMouse : Integer ; Tool $03,$1F;
|
||||
PROCEDURE SetAbsClamp ( xMinClamp:Integer; xMaxClamp:Integer;
|
||||
yMinClamp:Integer; yMaxClamp:Integer) ; EXTERNAL ;
|
||||
PROCEDURE SetHeartBeat ( taskPtr:Ptr) ; Tool $03,$12;
|
||||
PROCEDURE SetMouse ( mouseMode:Integer) ; Tool $03,$19;
|
||||
PROCEDURE SetVector ( vectorRefNum:Integer; vectorPtr:Ptr) ; Tool $03,$10;
|
||||
PROCEDURE StatusID ( idTag:Integer) ; Tool $03,$22;
|
||||
PROCEDURE SysBeep ; Tool $03,$2C;
|
||||
PROCEDURE SysFailMgr ( errorCode:Integer; str:Str255) ; Tool $03,$15;
|
||||
FUNCTION UnPackBytes ( srcBuffer:Ptr; srcSize:Integer;VAR dstBuffer:Ptr;VAR
|
||||
dstSize:Integer) : Integer ; Tool $03,$27;
|
||||
PROCEDURE WriteBParam ( theData:Integer; paramRefNum:Integer) ; Tool $03,$0B;
|
||||
PROCEDURE WriteBRam ( bufferPtr:Ptr) ; Tool $03,$09;
|
||||
PROCEDURE WriteTimeHex ( month:Byte; day:Byte; curYear:Byte; hour:Byte;
|
||||
minute:Byte; second:Byte) ; EXTERNAL ;
|
||||
PROCEDURE AddToQueue ( newEntryPtr:Ptr; headerPtr:Ptr) ; Tool $03,$2E;
|
||||
PROCEDURE DeleteFromQueue ( entryPtr:Ptr; headerPtr:Ptr) ; Tool $03,$2F;
|
||||
PROCEDURE SetInterruptState ( iStateRec:InterruptStateRec;
|
||||
bytesDesired:Integer) ; Tool $03,$30;
|
||||
PROCEDURE GetInterruptState (VAR iStateRec:InterruptStateRec;
|
||||
bytesDesired:Integer) ; Tool $03,$31;
|
||||
FUNCTION GetIntStateRecSize : Integer ; Tool $03,$32;
|
||||
FUNCTION ReadMouse2 : MouseRec ; EXTERNAL ;
|
||||
FUNCTION GetCodeResConverter : ProcPtr ; Tool $03,$34;
|
||||
FUNCTION GetRomResource : Ptr ; Tool $03,$35;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,95 @@
|
|||
{********************************************
|
||||
; File: NoteSeq.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT NOTESEQ;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
pitchBend = $0; {Command - }
|
||||
tempo = $00000001; {Command - }
|
||||
turnNotesOff = $00000002; {Command - }
|
||||
jump = $00000003; {Command - }
|
||||
setVibratoDepth = $00000004; {Command - }
|
||||
programChange = $00000005; {Command - }
|
||||
setRegister = $00000006; {Command - }
|
||||
ifGo = $00000007; {Command - }
|
||||
incRegister = $00000008; {Command - }
|
||||
decRegister = $00000009; {Command - }
|
||||
midiNoteOff = $0000000A; {Command - }
|
||||
midiNoteOn = $0000000B; {Command - }
|
||||
midiPolyKey = $0000000C; {Command - }
|
||||
midiCtlChange = $0000000D; {Command - }
|
||||
midiProgChange = $0000000E; {Command - }
|
||||
midiChnlPress = $0000000F; {Command - }
|
||||
midiPitchBend = $00000010; {Command - }
|
||||
midiSelChnlMode = $00000011; {Command - }
|
||||
midiSysExclusive = $00000012; {Command - }
|
||||
midiSysCommon = $00000013; {Command - }
|
||||
midiSysRealTime = $00000014; {Command - }
|
||||
midiSetSysExl = $00000015; {Command - }
|
||||
commandMask = $0000007F; {Command - }
|
||||
volumeMask = $0000007F; {Command - }
|
||||
chord = $00000080; {Command - }
|
||||
val1Mask = $00007F00; {Command - }
|
||||
toneMask = $00007F00; {Command - }
|
||||
noteMask = $00008000; {Command - }
|
||||
lByte = $00FF0000; {Command - meaning depends on midi command }
|
||||
durationMask = $07FF0000; {Command - }
|
||||
trackMask = $78000000; {Command - }
|
||||
delayMask = $80000000; {Command - }
|
||||
hByte = $FF000000; {Command - }
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
noRoomMidiErr = $1A00; {error - }
|
||||
noCommandErr = $1A01; {error - can't understand the current SeqItem }
|
||||
noRoomErr = $1A02; {error - sequence is more than twelve levels deep }
|
||||
startedErr = $1A03; {error - Note Sequencer is already started }
|
||||
noNoteErr = $1A04; {error - can't find the note to be turned off by the current
|
||||
SeqItem }
|
||||
noStartErr = $1A05; {error - Note Sequencer not started yet }
|
||||
instBndsErr = $1A06; {error - Instrument number out of Instrument boundary
|
||||
range }
|
||||
nsWrongVer = $1A07; {error - incompatible versions of NoteSequencer and
|
||||
NoteSynthesizer }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
TYPE
|
||||
LocRecHndl = ^LocRecPtr;
|
||||
LocRecPtr = ^LocRec;
|
||||
LocRec = RECORD
|
||||
curPhraseItem : Integer;
|
||||
curPattItem : Integer;
|
||||
curLevel : Integer;
|
||||
END;
|
||||
PROCEDURE SeqBootInit ; Tool $1A,$01;
|
||||
PROCEDURE SeqStartUp ( dPageAddr:Integer; mode:Integer; updateRate:Integer;
|
||||
increment:Integer) ; Tool $1A,$02;
|
||||
PROCEDURE SeqShutDown ; Tool $1A,$03;
|
||||
FUNCTION SeqVersion : Integer ; Tool $1A,$04;
|
||||
PROCEDURE SeqReset ; Tool $1A,$05;
|
||||
FUNCTION SeqStatus : Boolean ; Tool $1A,$06;
|
||||
PROCEDURE SeqAllNotesOff ; Tool $1A,$0D;
|
||||
FUNCTION ClearIncr : Integer ; Tool $1A,$0A;
|
||||
FUNCTION GetLoc : LocRec ; EXTERNAL ;
|
||||
FUNCTION GetTimer : Integer ; Tool $1A,$0B;
|
||||
PROCEDURE SetIncr ( increment:Integer) ; Tool $1A,$09;
|
||||
PROCEDURE SetInstTable ( instTable:Handle) ; Tool $1A,$12;
|
||||
PROCEDURE SetTrkInfo ( priority:Integer; instIndex:Integer; trackNum:Integer)
|
||||
; Tool $1A,$0E;
|
||||
PROCEDURE StartInts ; Tool $1A,$13;
|
||||
PROCEDURE StartSeq ( errHndlrRoutine:VoidProcPtr; compRoutine:VoidProcPtr;
|
||||
sequence:Handle) ; Tool $1A,$0F;
|
||||
PROCEDURE StepSeq ; Tool $1A,$10;
|
||||
PROCEDURE StopInts ; Tool $1A,$14;
|
||||
PROCEDURE StopSeq ( next:Integer) ; Tool $1A,$11;
|
||||
PROCEDURE StartSeqRel ( errHandlerPtr:ProcPtr; compRoutine:ProcPtr;
|
||||
sequence:Handle) ; Tool $1A,$15;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,87 @@
|
|||
{********************************************
|
||||
; File: NoteSyn.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT NOTESYN;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
CONST
|
||||
nsAlreadyInit = $1901; {error - Note Syn already initialized }
|
||||
nsSndNotInit = $1902; {error - Sound Tools not initialized }
|
||||
nsNotAvail = $1921; {error - generator not available }
|
||||
nsBadGenNum = $1922; {error - bad generator number }
|
||||
nsNotInit = $1923; {error - Note Syn not initialized }
|
||||
nsGenAlreadyOn = $1924; {error - generator already on }
|
||||
soundWrongVer = $1925; {error - incompatible versions of Sound and NoteSyn }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
TYPE
|
||||
EnvelopeHndl = ^EnvelopePtr;
|
||||
EnvelopePtr = ^Envelope;
|
||||
Envelope = PACKED RECORD
|
||||
st1BkPt : Byte;
|
||||
st1Increment : Integer;
|
||||
st2BkPt : Byte;
|
||||
st2Increment : Integer;
|
||||
st3BkPt : Byte;
|
||||
st3Increment : Integer;
|
||||
st4BkPt : Byte;
|
||||
st4Increment : Integer;
|
||||
st5BkPt : Byte;
|
||||
st5Increment : Integer;
|
||||
st6BkPt : Byte;
|
||||
st6Increment : Integer;
|
||||
st7BkPt : Byte;
|
||||
st7Increment : Integer;
|
||||
st8BkPt : Byte;
|
||||
st8Increment : Integer;
|
||||
END;
|
||||
WaveFormHndl = ^WaveFormPtr;
|
||||
WaveFormPtr = ^WaveForm;
|
||||
WaveForm = PACKED RECORD
|
||||
wfTopKey : Byte;
|
||||
wfWaveAddress : Byte;
|
||||
wfWaveSize : Byte;
|
||||
wfDocMode : Byte;
|
||||
wfRelPitch : Integer;
|
||||
END;
|
||||
InstrumentHndl = ^InstrumentPtr;
|
||||
InstrumentPtr = ^Instrument;
|
||||
Instrument = PACKED RECORD
|
||||
theEnvelope : Envelope;
|
||||
releaseSegment : Byte;
|
||||
priorityIncrement : Byte;
|
||||
pitchBendRange : Byte;
|
||||
vibratoDepth : Byte;
|
||||
vibratoSpeed : Byte;
|
||||
inSpare : Byte;
|
||||
aWaveCount : Byte;
|
||||
bWaveCount : Byte;
|
||||
aWaveList : ARRAY[1..1] OF WaveForm;
|
||||
bWaveList : ARRAY[1..1] OF WaveForm;
|
||||
END;
|
||||
PROCEDURE NSBootInit ; Tool $19,$01;
|
||||
PROCEDURE NSStartUp ( updateRate:Integer; userUpdateRtnPtr:Ptr) ; Tool
|
||||
$19,$02;
|
||||
PROCEDURE NSShutDown ; Tool $19,$03;
|
||||
FUNCTION NSVersion : Integer ; Tool $19,$04;
|
||||
PROCEDURE NSReset ; Tool $19,$05;
|
||||
FUNCTION NSStatus : Boolean ; Tool $19,$06;
|
||||
PROCEDURE AllNotesOff ; Tool $19,$0D;
|
||||
FUNCTION AllocGen ( requestPriority:Integer) : Integer ; Tool $19,$09;
|
||||
PROCEDURE DeallocGen ( genNumber:Integer) ; Tool $19,$0A;
|
||||
PROCEDURE NoteOff ( genNumber:Integer; semitone:Integer) ; Tool $19,$0C;
|
||||
PROCEDURE NoteOn ( genNumber:Integer; semitone:Integer; volume:Integer;
|
||||
instrumentPtr:Ptr) ; Tool $19,$0B;
|
||||
PROCEDURE NSSetUpdateRate ( updateRate:Integer) ; Tool $19,$0E;
|
||||
FUNCTION NSSetUserUpdateRtn ( updateRtn:VoidProcPtr) : VoidProcPtr ; Tool
|
||||
$19,$0F;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,165 @@
|
|||
{********************************************
|
||||
; File: Print.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT PRINT;
|
||||
INTERFACE
|
||||
USES TYPES,QUICKDRAW,EVENTS,CONTROLS,WINDOWS,LINEEDIT,DIALOGS;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
pntrConFailed = $1308; {error - connection to the printer failed }
|
||||
memFullErr = $FF80; {errors - }
|
||||
ioAbort = $FFE5; {errors - }
|
||||
prAbort = $0080; {errors - }
|
||||
missingDriver = $1301; {errors - specified driver not in system/drivers }
|
||||
portNotOn = $1302; {errors - specified port not selected in ctl panel }
|
||||
noPrintRecord = $1303; {errors - no print record was given }
|
||||
badLaserPrep = $1304; {errors - laser prep in laser writer incompatible }
|
||||
badLPFile = $1305; {errors - laser prep in system/drivers incompatible }
|
||||
papConnNotOpen = $1306; {errors - cannot connect to laser writer }
|
||||
papReadWriteErr = $1307; {errors - apple talk PAPRead or PAPWrite error }
|
||||
ptrConnFailed = $1308; {errors - cannot establish connection with imagewriter }
|
||||
badLoadParam = $1309; {errors - parameter for load/unload is invalid }
|
||||
callNotSupported = $130A; {errors - toolcall made is not supported by this
|
||||
version }
|
||||
startUpAlreadyMade = $1321; {errors - low level startup already made }
|
||||
invalidCtlVal = $1322; {errors - invalid control value had been spec'd }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
kReset = $0001; {LLDControl - Printer control value - reset printer }
|
||||
kFormFeed = $0002; {LLDControl - Printer control value - form feed }
|
||||
kLineFeed = $0003; {LLDControl - Printer control value - line feed }
|
||||
bothDrivers = $0; {whichDriver - input to PMLoadDriver and PMUnloadDriver }
|
||||
printerDriver = $0001; {whichDriver - input to PMLoadDriver and PMUnloadDriver
|
||||
}
|
||||
portDriver = $0002; {whichDriver - input to PMLoadDriver and PMUnloadDriver }
|
||||
prPortrait = $0000; { - }
|
||||
prLandscape = $0001; { - }
|
||||
prImageWriter = $0001; { - }
|
||||
prImageWriterLQ = $0002; { - }
|
||||
prLaserWriter = $0003; { - }
|
||||
prEpson = $0004; { - }
|
||||
prBlackWhite = $0001; { - }
|
||||
prColor = $0002; { - }
|
||||
bDraftLoop = $0000; { - }
|
||||
bSpoolLoop = $0080; { - }
|
||||
|
||||
TYPE
|
||||
PrPrinterSpecRec = RECORD
|
||||
prPrinterType : Integer;
|
||||
prCharacteristics : Integer;
|
||||
END;
|
||||
PrInfoRecHndl = ^PrInfoRecPtr;
|
||||
PrInfoRecPtr = ^PrInfoRec;
|
||||
PrInfoRec = RECORD
|
||||
iDev : Integer; { reserved for internal use }
|
||||
iVRes : Integer; { vertical resolution of printer }
|
||||
iHRes : Integer; { horizontal resolution of printer }
|
||||
rPage : Rect; { defining page rectangle }
|
||||
END;
|
||||
PrJobRecPtr = ^PrJobRec;
|
||||
PrJobRec = PACKED RECORD
|
||||
iFstPage : Integer; { first page to print }
|
||||
iLstPage : Integer; { last page to print }
|
||||
iCopies : Integer; { number of copies }
|
||||
bJDocLoop : Byte; { printing method }
|
||||
fFromUser : Byte; { used internally }
|
||||
pIdleProc : WordProcPtr; { background procedure }
|
||||
pFileName : Ptr; { spool file name }
|
||||
iFileVol : Integer; { spool file volume reference number }
|
||||
bFileVers : Byte; { spool file version number }
|
||||
bJobX : Byte; { used internally }
|
||||
END;
|
||||
PrStyleRecHndl = ^PrStyleRecPtr;
|
||||
PrStyleRecPtr = ^PrStyleRec;
|
||||
PrStyleRec = RECORD
|
||||
wDev : Integer; { output quality information }
|
||||
internA : ARRAY[1..3] OF Integer; { for internal use }
|
||||
feed : Integer; { paper feed type }
|
||||
paperType : Integer; { paper type }
|
||||
crWidth : Integer; { carriage Width for image writer or vertical sizing for
|
||||
lazer writer }
|
||||
reduction : Integer; { % reduction, laser writer only }
|
||||
internB : Integer; { for internal use }
|
||||
END;
|
||||
PrRecHndl = ^PrRecPtr;
|
||||
PrRecPtr = ^PrRec;
|
||||
PrRec = RECORD
|
||||
prVersion : Integer; { print manager version }
|
||||
prInfo : PrInfoRec; { printer infomation subrecord }
|
||||
rPaper : Rect; { Defining paper rectangle }
|
||||
prStl : PrStyleRec; { style subrecord }
|
||||
prInfoPT : PACKED ARRAY[1..14] OF Byte; { reserved for internal use }
|
||||
prXInfo : PACKED ARRAY[1..24] OF Byte; { reserved for internal use }
|
||||
prJob : PrJobRec; { job subrecord }
|
||||
printX : PACKED ARRAY[1..38] OF Byte; { reserved for future use }
|
||||
iReserved : Integer; { reserved for internal use }
|
||||
END;
|
||||
PrStatusRecHndl = ^PrStatusRecPtr;
|
||||
PrStatusRecPtr = ^PrStatusRec;
|
||||
PrStatusRec = RECORD
|
||||
iTotPages : Integer; { number of pages in spool file }
|
||||
iCurPage : Integer; { page being printed }
|
||||
iTotCopies : Integer; { number of copies requested }
|
||||
iCurCopy : Integer; { copy being printed }
|
||||
iTotBands : Integer; { reserved for internal use }
|
||||
iCurBand : Integer; { reserved for internal use }
|
||||
fPgDirty : Integer; { TRUE if started printing page }
|
||||
fImaging : Integer; { reserved for internal use }
|
||||
hPrint : PrRecHndl; { handle of print record }
|
||||
pPrPort : GrafPortPtr; { pointer to grafport being use for printing }
|
||||
hPic : Longint; { reserved for internal use }
|
||||
END;
|
||||
PROCEDURE PMBootInit ; Tool $13,$01;
|
||||
PROCEDURE PMStartUp ( userID:Integer; dPageAddr:Integer) ; Tool $13,$02;
|
||||
PROCEDURE PMShutDown ; Tool $13,$03;
|
||||
FUNCTION PMVersion : Integer ; Tool $13,$04;
|
||||
PROCEDURE PMReset ; Tool $13,$05;
|
||||
FUNCTION PMStatus : Boolean ; Tool $13,$06;
|
||||
PROCEDURE LLDBitMap ( bitMapPtr:Ptr; rectPtr:Rect; userID:Integer) ; Tool
|
||||
$13,$1C;
|
||||
PROCEDURE LLDControl ( printerControlValue:Integer) ; Tool $13,$1B;
|
||||
PROCEDURE LLDShutDown ( userID:Integer) ; Tool $13,$1A;
|
||||
PROCEDURE LLDStartUp ( dPageAddr:Integer; userID:Integer) ; Tool $13,$19;
|
||||
PROCEDURE LLDText ( textPtr:Ptr; textLength:Integer; userID:Integer) ; Tool
|
||||
$13,$1D;
|
||||
PROCEDURE PMLoadDriver ( whichDriver:Integer) ; Tool $13,$35;
|
||||
PROCEDURE PMUnloadDriver ( whichDriver:Integer) ; Tool $13,$34;
|
||||
FUNCTION PrChoosePrinter : Boolean ; Tool $13,$16;
|
||||
FUNCTION PrChooser : Boolean ; Tool $13,$16;
|
||||
PROCEDURE PrCloseDoc ( printGrafPortPtr:GrafPortPtr) ; Tool $13,$0F;
|
||||
PROCEDURE PrClosePage ( printGrafPortPtr:GrafPortPtr) ; Tool $13,$11;
|
||||
PROCEDURE PrDefault ( printRecordHandle:PrRecHndl) ; Tool $13,$09;
|
||||
FUNCTION PrDriverVer : Integer ; Tool $13,$23;
|
||||
FUNCTION PrError : Integer ; Tool $13,$14;
|
||||
FUNCTION PrJobDialog ( printRecordHandle:PrRecHndl) : Boolean ; Tool $13,$0C;
|
||||
FUNCTION PrOpenDoc ( printRecordHandle:PrRecHndl; printGrafPortPtr:GrafPortPtr)
|
||||
: GrafPortPtr ; Tool $13,$0E;
|
||||
PROCEDURE PrOpenPage ( printGrafPortPtr:GrafPortPtr; pageFramePtr:RectPtr) ;
|
||||
Tool $13,$10;
|
||||
PROCEDURE PrPicFile ( printRecordHandle:PrRecHndl;
|
||||
printGrafPortPtr:GrafPortPtr; statusRecPtr:PrStatusRecPtr) ; Tool $13,$12;
|
||||
PROCEDURE PrPixelMap ( srcLocPtr:LocInfoPtr; srcRectPtr:Rect;
|
||||
colorFlag:Integer) ; Tool $13,$0D;
|
||||
FUNCTION PrPortVer : Integer ; Tool $13,$24;
|
||||
PROCEDURE PrSetError ( errorNumber:Integer) ; Tool $13,$15;
|
||||
FUNCTION PrStlDialog ( printRecordHandle:PrRecHndl) : Boolean ; Tool $13,$0B;
|
||||
FUNCTION PrValidate ( printRecordHandle:PrRecHndl) : Boolean ; Tool $13,$0A;
|
||||
PROCEDURE PrSetDocName ( DocNamePtr:StringPtr) ; Tool $13,$37;
|
||||
FUNCTION PrGetDocName : StringPtr ; Tool $13,$36;
|
||||
FUNCTION PrGetPgOrientation ( prRecordHandle:PrRecHndl) : Integer ; Tool
|
||||
$13,$38;
|
||||
FUNCTION PrGetPrinterSpecs : PrPrinterSpecRec ; Tool $13,$18;
|
||||
PROCEDURE PrGetZoneName (VAR ZoneNamePtr:Str255) ; Tool $13,$25;
|
||||
PROCEDURE PrGetPrinterDvrName (VAR DvrNamePtr:Str255) ; Tool $13,$28;
|
||||
PROCEDURE PrGetPortDvrName (VAR DvrNamePtr:Str255) ; Tool $13,$29;
|
||||
PROCEDURE PrGetUserName (VAR UserNamePtr:Str255) ; Tool $13,$2A;
|
||||
PROCEDURE PrGetNetworkName (VAR NetworkNamePtr:Str255) ; Tool $13,$2B;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,211 @@
|
|||
FileAccess: mask Word {
|
||||
7: destroyEnable
|
||||
6: renameEnable
|
||||
5: backupNeeded
|
||||
1: writeEnable
|
||||
0: readEnable
|
||||
}
|
||||
|
||||
FileDate: mask Word {
|
||||
15-9: year
|
||||
8-5: month
|
||||
4-0: day
|
||||
}
|
||||
|
||||
FileTime: mask Word {
|
||||
12-8: hour
|
||||
5-0: minute
|
||||
}
|
||||
|
||||
StorageType: enum Word {
|
||||
inactive: $0
|
||||
seedling: $1
|
||||
sapling: $2
|
||||
tree: $3
|
||||
pascal: $4
|
||||
directory: $d
|
||||
}
|
||||
|
||||
CREATE_PB: record {
|
||||
pathname: ^String // 00
|
||||
access: FileAccess // 04
|
||||
file_type: Word // 06
|
||||
aux_type: Long // 08
|
||||
storage_type: StorageType // 0c
|
||||
create_date: FileDate // 0e
|
||||
create_time: FileTime // 10
|
||||
}
|
||||
|
||||
DESTROY_PB: record {
|
||||
pathname: ^String // 00
|
||||
}
|
||||
|
||||
CHANGE_PATH_PB: record {
|
||||
pathname: ^String // 00
|
||||
new_pathname: ^String // 04
|
||||
}
|
||||
|
||||
SET_FILE_INFO_PB: record {
|
||||
pathname: ^String // 00
|
||||
access: FileAccess // 04
|
||||
file_type: Word // 06
|
||||
aux_type: Long // 08
|
||||
unused: Word // 0c
|
||||
create_date: FileDate // 0e
|
||||
create_time: FileTime // 10
|
||||
mod_date: FileDate // 12
|
||||
mod_time: FileTime // 14
|
||||
}
|
||||
|
||||
GET_FILE_INFO_PB: record {
|
||||
pathname: ^String // 00
|
||||
access: FileAccess // 04
|
||||
file_type: Word // 06
|
||||
aux_type: Long // 08
|
||||
storage_type: StorageType // 0c
|
||||
create_date: FileDate // 0e
|
||||
create_time: FileTime // 10
|
||||
mod_date: FileDate // 12
|
||||
mod_time: FileTime // 14
|
||||
blocks_used: Long // 16
|
||||
}
|
||||
|
||||
VOLUME_PB: record {
|
||||
dev_name: ^String // 00
|
||||
vol_name: ^String // 04
|
||||
total_blocks: Long // 08
|
||||
free_blocks: Long // 0c
|
||||
file_sys_id: Word // 10
|
||||
}
|
||||
|
||||
SET_PREFIX_PB: record {
|
||||
prefix_num: Word // 00
|
||||
prefix: ^String // 02
|
||||
}
|
||||
|
||||
GET_PREFIX_PB: record {
|
||||
prefix_num: Word // 00
|
||||
prefix: ^String // 02
|
||||
}
|
||||
|
||||
CLEAR_BACKUP_BIT_PB: record {
|
||||
pathname: ^String // 00
|
||||
}
|
||||
|
||||
OPEN_PB: record {
|
||||
ref_num: Word // 00
|
||||
pathname: ^String // 02
|
||||
io_buffer: Ptr // 06
|
||||
}
|
||||
|
||||
NEWLINE_PB: record {
|
||||
ref_num: Word // 00
|
||||
enable_Mask: Word // 02
|
||||
newline_char: Word // 04
|
||||
}
|
||||
|
||||
READ_PB: record {
|
||||
ref_num: Word // 00
|
||||
data_buffer: Ptr // 02
|
||||
request_count: Long // 06
|
||||
transfer_count: Long // 0a
|
||||
}
|
||||
|
||||
WRITE_PB: record {
|
||||
ref_num: Word // 00
|
||||
data_buffer: Ptr // 02
|
||||
request_count: Long // 06
|
||||
transfer_count: Long // 0a
|
||||
}
|
||||
|
||||
CLOSE_PB: record {
|
||||
ref_num: Word // 00
|
||||
}
|
||||
|
||||
FLUSH_PB: record {
|
||||
ref_num: Word // 00
|
||||
}
|
||||
|
||||
SET_MARK_PB: record {
|
||||
ref_num: Word // 00
|
||||
position: Long // 02
|
||||
}
|
||||
|
||||
GET_MARK_PB: record {
|
||||
ref_num: Word // 00
|
||||
position: Long // 02
|
||||
}
|
||||
|
||||
SET_EOF_PB: record {
|
||||
ref_num: Word // 00
|
||||
eof: Long // 02
|
||||
}
|
||||
|
||||
GET_EOF_PB: record {
|
||||
ref_num: Word // 00
|
||||
eof: Long // 02
|
||||
}
|
||||
|
||||
SET_LEVEL_PB: record {
|
||||
level: Word // 00
|
||||
}
|
||||
|
||||
GET_LEVEL_PB: record {
|
||||
level: Word // 00
|
||||
}
|
||||
|
||||
GET_DEV_NUM_PB: record {
|
||||
dev_name: ^String // 00
|
||||
dev_num: Word // 04
|
||||
}
|
||||
|
||||
GET_LAST_DEV_PB: record {
|
||||
dev_num: Word // 00
|
||||
}
|
||||
|
||||
READ_BLOCK_PB: record {
|
||||
dev_num: Word // 00
|
||||
data_buffer: Ptr // 02
|
||||
block_num: Long // 06
|
||||
}
|
||||
|
||||
WRITE_BLOCK_PB: record {
|
||||
dev_num: Word // 00
|
||||
data_buffer: Ptr // 02
|
||||
block_num: Long // 06
|
||||
}
|
||||
|
||||
FORMAT_PB: record {
|
||||
dev_name: ^String // 00
|
||||
vol_name: ^String // 04
|
||||
file_sys_id: Word // 08
|
||||
}
|
||||
|
||||
GET_NAME_PB: record {
|
||||
data_buffer: ^String // 00
|
||||
}
|
||||
|
||||
GET_BOOT_VOL_PB: record {
|
||||
data_buffer: ^String // 00
|
||||
}
|
||||
|
||||
QUIT_PB: record {
|
||||
pathname: ^String // 00
|
||||
flags: mask Word { // 04
|
||||
15: returnUserID
|
||||
14: restartable
|
||||
}
|
||||
}
|
||||
|
||||
GET_VERSION_PB: record {
|
||||
version: Word // 00
|
||||
}
|
||||
|
||||
ALLOC_INTERRUPT_PB: record {
|
||||
int_num: Word // 00
|
||||
int_code: Ptr // 02
|
||||
}
|
||||
|
||||
DEALLOC_INTERRUPT_PB: record {
|
||||
int_num: Word // 00
|
||||
}
|
|
@ -0,0 +1,119 @@
|
|||
{********************************************
|
||||
; File: QDAux.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT QDAUX;
|
||||
INTERFACE
|
||||
USES TYPES,QUICKDRAW;
|
||||
CONST
|
||||
|
||||
(* *** Private Constants ***
|
||||
frameVerb = $00; {PicInfo - PRIVATE - for reference only }
|
||||
picNop = $00; {PicInfo - PRIVATE - for reference only }
|
||||
drawCharVerb = $00; {PicInfo - PRIVATE - for reference only }
|
||||
paintVerb = $01; {PicInfo - PRIVATE - for reference only }
|
||||
picClipRgn = $01; {PicInfo - PRIVATE - for reference only }
|
||||
drawTextVerb = $01; {PicInfo - PRIVATE - for reference only }
|
||||
eraseVerb = $02; {PicInfo - PRIVATE - for reference only }
|
||||
picBkPat = $02; {PicInfo - PRIVATE - for reference only }
|
||||
drawCStrVerb = $02; {PicInfo - PRIVATE - for reference only }
|
||||
invertVerb = $03; {PicInfo - PRIVATE - for reference only }
|
||||
picTxFont = $03; {PicInfo - PRIVATE - for reference only }
|
||||
fillVerb = $04; {PicInfo - PRIVATE - for reference only }
|
||||
picTxFace = $04; {PicInfo - PRIVATE - for reference only }
|
||||
picTxMode = $05; {PicInfo - PRIVATE - for reference only }
|
||||
picSpExtra = $06; {PicInfo - PRIVATE - for reference only }
|
||||
picPnSize = $07; {PicInfo - PRIVATE - for reference only }
|
||||
picPnMode = $08; {PicInfo - PRIVATE - for reference only }
|
||||
picPnPat = $09; {PicInfo - PRIVATE - for reference only }
|
||||
picThePat = $0A; {PicInfo - PRIVATE - for reference only }
|
||||
picOvSize = $0B; {PicInfo - PRIVATE - for reference only }
|
||||
picOrigin = $0C; {PicInfo - PRIVATE - for reference only }
|
||||
picTxSize = $0D; {PicInfo - PRIVATE - for reference only }
|
||||
picFGColor = $0E; {PicInfo - PRIVATE - for reference only }
|
||||
picBGColor = $0F; {PicInfo - PRIVATE - for reference only }
|
||||
picTxRatio = $10; {PicInfo - PRIVATE - for reference only }
|
||||
picVersion = $11; {PicInfo - PRIVATE - for reference only }
|
||||
lineNoun = $20; {PicInfo - PRIVATE - for reference only }
|
||||
picLine = $20; {PicInfo - PRIVATE - for reference only }
|
||||
picLineFrom = $21; {PicInfo - PRIVATE - for reference only }
|
||||
picShortL = $22; {PicInfo - PRIVATE - for reference only }
|
||||
picShortLFrom = $23; {PicInfo - PRIVATE - for reference only }
|
||||
picLongText = $28; {PicInfo - PRIVATE - for reference only }
|
||||
picDHText = $29; {PicInfo - PRIVATE - for reference only }
|
||||
picDVText = $2A; {PicInfo - PRIVATE - for reference only }
|
||||
picDVDHText = $2B; {PicInfo - PRIVATE - for reference only }
|
||||
rectNoun = $30; {PicInfo - PRIVATE - for reference only }
|
||||
rRectNoun = $40; {PicInfo - PRIVATE - for reference only }
|
||||
ovalNoun = $50; {PicInfo - PRIVATE - for reference only }
|
||||
arcNoun = $60; {PicInfo - PRIVATE - for reference only }
|
||||
polyNoun = $70; {PicInfo - PRIVATE - for reference only }
|
||||
rgnNoun = $80; {PicInfo - PRIVATE - for reference only }
|
||||
mapNoun = $90; {PicInfo - PRIVATE - for reference only }
|
||||
picBitsRect = $90; {PicInfo - PRIVATE - for reference only }
|
||||
picBitsRgn = $91; {PicInfo - PRIVATE - for reference only }
|
||||
picPBitsRect = $98; {PicInfo - PRIVATE - for reference only }
|
||||
picPBitsRgn = $99; {PicInfo - PRIVATE - for reference only }
|
||||
picShortComment = $A0; {PicInfo - PRIVATE - for reference only }
|
||||
picLongComment = $A1; {PicInfo - PRIVATE - for reference only }
|
||||
picEnd = $FF; {PicInfo - PRIVATE - for reference only }
|
||||
*** Private Constants *** *)
|
||||
|
||||
resMode640PMask = $00; {SeedFill/CalcMask - }
|
||||
resMode640DMask = $01; {SeedFill/CalcMask - }
|
||||
resMode320Mask = $02; {SeedFill/CalcMask - }
|
||||
destModeCopyMask = $0000; {SeedFill/CalcMask - }
|
||||
destModeLeaveMask = $1000; {SeedFill/CalcMask - }
|
||||
destModeOnesMask = $2000; {SeedFill/CalcMask - }
|
||||
destModeZerosMask = $3000; {SeedFill/CalcMask - }
|
||||
destModeError = $1212; {Error - }
|
||||
|
||||
TYPE
|
||||
QDIconRecordHndl = ^QDIconRecordPtr;
|
||||
QDIconRecordPtr = ^QDIconRecord;
|
||||
QDIconRecord = RECORD
|
||||
iconType : Integer;
|
||||
iconSize : Integer;
|
||||
iconHeight : Integer;
|
||||
iconWidth : Integer;
|
||||
iconImage : PACKED ARRAY[1..1] OF Byte;
|
||||
iconMask : PACKED ARRAY[1..1] OF Byte;
|
||||
END;
|
||||
PicHndl = ^PicPtr;
|
||||
PicPtr = ^Picture;
|
||||
Picture = RECORD
|
||||
picSCB : Integer;
|
||||
picFrame : Rect; { Followed by picture opcodes }
|
||||
END;
|
||||
PROCEDURE QDAuxBootInit ; Tool $12,$01;
|
||||
PROCEDURE QDAuxStartUp ; Tool $12,$02;
|
||||
PROCEDURE QDAuxShutDown ; Tool $12,$03;
|
||||
FUNCTION QDAuxVersion : Integer ; Tool $12,$04;
|
||||
PROCEDURE QDAuxReset ; Tool $12,$05;
|
||||
FUNCTION QDAuxStatus : Boolean ; Tool $12,$06;
|
||||
PROCEDURE CopyPixels ( srcLocPtr:LocInfo; destLocPtr:LocInfo; srcRect:Rect;
|
||||
destRect:Rect; xferMode:Integer; makeRgn:RgnHandle) ; Tool $12,$09;
|
||||
PROCEDURE DrawIcon ( iconPtr:QDIconRecord; displayMode:Integer; xPos:Integer;
|
||||
yPos:Integer) ; Tool $12,$0B;
|
||||
PROCEDURE SpecialRect ( rectPtr:Rect; frameColor:Integer; fillColor:Integer) ;
|
||||
Tool $12,$0C;
|
||||
PROCEDURE WaitCursor ; Tool $12,$0A;
|
||||
PROCEDURE SeedFill ( srcLocInfoPtr:LocInfo; srcRect:Rect;
|
||||
dstLocInfoPtr:LocInfo; dstRect:Rect; seedH:Integer; seedV:Integer;
|
||||
resMode:Integer; U__patternPtr:PatternPtr; leakTblPtr:Ptr) ; Tool $12,$0D;
|
||||
PROCEDURE CalcMask ( srcLocInfoPtr:LocInfo; srcRect:Rect;
|
||||
dstLocInfoPtr:LocInfo; dstRect:Rect; resMode:Integer; U__patternPtr:PatternPtr;
|
||||
leakTblPtr:Ptr) ; Tool $12,$0E;
|
||||
PROCEDURE PicComment ( kind:Integer; dataSize:Integer; dataHandle:Handle) ;
|
||||
Tool $04,$B8;
|
||||
PROCEDURE ClosePicture ; Tool $04,$B9;
|
||||
PROCEDURE DrawPicture ( picHandle:PicHndl; destRect:Rect) ; Tool $04,$BA;
|
||||
PROCEDURE KillPicture ( pichandle:PicHndl) ; Tool $04,$BB;
|
||||
FUNCTION OpenPicture ( picFrame:Rect) : PicHndl ; Tool $04,$B7;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,510 @@
|
|||
{********************************************
|
||||
; File: Quickdraw.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT QUICKDRAW;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
alreadyInitialized = $0401; {error - Quickdraw already initialized }
|
||||
cannotReset = $0402; {error - never used }
|
||||
notInitialized = $0403; {error - Quickdraw not initialized }
|
||||
screenReserved = $0410; {error - screen reserved }
|
||||
badRect = $0411; {error - bad rectangle }
|
||||
notEqualChunkiness = $0420; {error - Chunkiness is not equal }
|
||||
rgnAlreadyOpen = $0430; {error - region is already open }
|
||||
rgnNotOpen = $0431; {error - region is not open }
|
||||
rgnScanOverflow = $0432; {error - region scan overflow }
|
||||
rgnFull = $0433; {error - region is full }
|
||||
polyAlreadyOpen = $0440; {error - poly is already open }
|
||||
polyNotOpen = $0441; {error - poly is not open }
|
||||
polyTooBig = $0442; {error - poly is too big }
|
||||
badTableNum = $0450; {error - bad table number }
|
||||
badColorNum = $0451; {error - bad color number }
|
||||
badScanLine = $0452; {error - bad scan line }
|
||||
notImplemented = $04FF; {error - not implemented }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
tsNumber = $04; { - }
|
||||
U_colorTable = $0F; {AnSCBByte - Mask for SCB color table }
|
||||
scbReserved = $10; {AnSCBByte - Mask for SCB reserved bit }
|
||||
scbFill = $20; {AnSCBByte - Mask for SCB fill bit }
|
||||
scbInterrupt = $40; {AnSCBByte - Mask for SCB interrupt bit }
|
||||
scbColorMode = $80; {AnSCBByte - Mask for SCB color mode bit }
|
||||
table320 = $32; {ColorData - (val=size) }
|
||||
table640 = $32; {ColorData - (val=size) }
|
||||
blueMask = $000F; {ColorValue - Mask for Blue nibble }
|
||||
greenMask = $00F0; {ColorValue - Mask for green nibble }
|
||||
redMask = $0F00; {ColorValue - Mask for red nibble }
|
||||
widMaxSize = $0001; {FontFlags - }
|
||||
zeroSize = $0002; {FontFlags - }
|
||||
maskSize = $08; {GrafPort - Mask Size (val=size) }
|
||||
locSize = $10; {GrafPort - Loc Size (val=size) }
|
||||
patsize = $20; {GrafPort - Pattern Size (val=size) }
|
||||
pnStateSize = $32; {GrafPort - Pen State Size (Val=size) }
|
||||
portSize = $AA; {GrafPort - Size of GrafPort }
|
||||
black = $000; {MasterColors - These work in 320 and 640 mode }
|
||||
blue = $00F; {MasterColors - These work in 320 and 640 mode }
|
||||
darkGreen320 = $080; {MasterColors - These work in 320 mode }
|
||||
green320 = $0E0; {MasterColors - These work in 320 mode }
|
||||
green640 = $0F0; {MasterColors - These work in 640 mode }
|
||||
lightBlue320 = $4DF; {MasterColors - These work in 320 mode }
|
||||
purple320 = $72C; {MasterColors - These work in 320 mode }
|
||||
darkGray320 = $777; {MasterColors - These work in 320 mode }
|
||||
periwinkleBlue320 = $78F; {MasterColors - These work in 320 mode }
|
||||
brown320 = $841; {MasterColors - These work in 320 mode }
|
||||
lightGray320 = $0CCC; {MasterColors - These work in 320 mode }
|
||||
red320 = $0D00; {MasterColors - These work in 320 mode }
|
||||
lilac320 = $0DAF; {MasterColors - These work in 320 mode }
|
||||
red640 = $0F00; {MasterColors - These work in 640 mode }
|
||||
orange320 = $0F70; {MasterColors - These work in 320 mode }
|
||||
flesh320 = $0FA9; {MasterColors - These work in 320 mode }
|
||||
yellow = $0FF0; {MasterColors - These work in 320 and 640 mode }
|
||||
white = $0FFF; {MasterColors - These work in 320 and 640 mode }
|
||||
modeCopy = $0000; {PenModeDATA - }
|
||||
modeOR = $0001; {PenModeDATA - }
|
||||
modeXOR = $0002; {PenModeDATA - }
|
||||
modeBIC = $0003; {PenModeDATA - }
|
||||
modeForeCopy = $0004; {PenModeDATA - }
|
||||
modeForeOR = $0005; {PenModeDATA - }
|
||||
modeForeXOR = $0006; {PenModeDATA - }
|
||||
modeForeBIC = $0007; {PenModeDATA - }
|
||||
modeNOT = $8000; {PenModeDATA - }
|
||||
notCopy = $8000; {PenModeDATA - }
|
||||
notOR = $8001; {PenModeDATA - }
|
||||
notXOR = $8002; {PenModeDATA - }
|
||||
notBIC = $8003; {PenModeDATA - }
|
||||
notForeCOPY = $8004; {PenModeDATA - }
|
||||
notForeOR = $8005; {PenModeDATA - }
|
||||
notForeXOR = $8006; {PenModeDATA - }
|
||||
notForeBIC = $8007; {PenModeDATA - }
|
||||
mode320 = $0000; {QDStartup - Argument to QDStartup }
|
||||
mode640 = $0080; {QDStartup - Argument to QDStartup }
|
||||
plainMask = $0000; {TextStyle - Mask for plain text bit }
|
||||
boldMask = $0001; {TextStyle - Mask for bold bit }
|
||||
italicMask = $0002; {TextStyle - Mask for italic bit }
|
||||
underlineMask = $0004; {TextStyle - Mask for underline bit }
|
||||
outlineMask = $0008; {TextStyle - Mask for outline bit }
|
||||
shadowMask = $0010; {TextStyle - Mask for shadow bit }
|
||||
|
||||
TYPE
|
||||
TextStyle = Integer ;
|
||||
ColorValue = Integer ;
|
||||
AnSCBByte = Byte ;
|
||||
PatternPtr = ^Pattern;
|
||||
Pattern = PACKED ARRAY[1..32] of Byte ;
|
||||
Mask = PACKED ARRAY[1..8] OF Byte;
|
||||
CursorHndl = ^CursorPtr;
|
||||
CursorPtr = ^Cursor;
|
||||
Cursor = RECORD
|
||||
cursorHeight : Integer; { size in bytes }
|
||||
cursorWidth : Integer; { enclosing rectangle }
|
||||
cursorData : ARRAY[1..1,1..1] OF Integer;
|
||||
cursorMask : ARRAY[1..1,1..1] OF Integer;
|
||||
cursorHotSpot : Point;
|
||||
END;
|
||||
RgnHandle = ^RgnPtr;
|
||||
RgnPtr = ^Region;
|
||||
Region = RECORD
|
||||
rgnSize : Integer; { size in bytes }
|
||||
rgnBBox : Rect; { enclosing rectangle }
|
||||
END;
|
||||
BufDimRecHndl = ^BufDimRecPtr;
|
||||
BufDimRecPtr = ^BufDimRec;
|
||||
BufDimRec = RECORD
|
||||
maxWidth : Integer;
|
||||
textBufHeight : Integer;
|
||||
textBufferWords : Integer;
|
||||
fontWidth : Integer;
|
||||
END;
|
||||
FontHndl = ^FontPtr;
|
||||
FontPtr = ^Font;
|
||||
Font = RECORD
|
||||
offseToMF : Integer; { fully defined front of the Font record. }
|
||||
family : Integer;
|
||||
style : TextStyle;
|
||||
size : Integer;
|
||||
version : Integer;
|
||||
fbrExtent : Integer;
|
||||
END;
|
||||
FontGlobalsRecHndl = ^FontGlobalsRecPtr;
|
||||
FontGlobalsRecPtr = ^FontGlobalsRecord;
|
||||
FontGlobalsRecord = RECORD
|
||||
fgFontID : Integer; { currently 12 bytes long, but may be expanded }
|
||||
fgStyle : TextStyle;
|
||||
fgSize : Integer;
|
||||
fgVersion : Integer;
|
||||
fgWidMax : Integer;
|
||||
fgFBRExtent : Integer;
|
||||
END;
|
||||
FontIDHndl = ^FontIDPtr;
|
||||
FontIDPtr = ^FontID;
|
||||
FontID = PACKED RECORD
|
||||
famNum : Integer;
|
||||
fontStyle : Byte;
|
||||
fontSize : Byte;
|
||||
END;
|
||||
FontInfoRecHndl = ^FontInfoRecPtr;
|
||||
FontInfoRecPtr = ^FontInfoRecord;
|
||||
FontInfoRecord = RECORD
|
||||
ascent : Integer;
|
||||
descent : Integer;
|
||||
widMax : Integer;
|
||||
leading : Integer;
|
||||
END;
|
||||
LocInfoHndl = ^LocInfoPtr;
|
||||
LocInfoPtr = ^LocInfo;
|
||||
LocInfo = RECORD
|
||||
portSCB : Integer; { SCBByte in low byte }
|
||||
ptrToPixImage : Ptr; { ImageRef }
|
||||
width : Integer; { Width }
|
||||
boundsRect : Rect; { BoundsRect }
|
||||
END;
|
||||
QDProcsHndl = ^QDProcsPtr;
|
||||
QDProcsPtr = ^QDProcs;
|
||||
QDProcs = RECORD
|
||||
stdText : VoidProcPtr;
|
||||
stdLine : VoidProcPtr;
|
||||
stdRect : VoidProcPtr;
|
||||
stdRRect : VoidProcPtr;
|
||||
stdOval : VoidProcPtr;
|
||||
stdArc : VoidProcPtr;
|
||||
stdPoly : VoidProcPtr;
|
||||
stdRgn : VoidProcPtr;
|
||||
stdPixels : VoidProcPtr;
|
||||
stdComment : VoidProcPtr;
|
||||
stdTxMeas : VoidProcPtr;
|
||||
stdTxBnds : VoidProcPtr;
|
||||
stdGetPic : VoidProcPtr;
|
||||
stdPutPic : VoidProcPtr;
|
||||
END;
|
||||
GrafPortHndl = ^GrafPortPtr;
|
||||
GrafPortPtr = ^GrafPort;
|
||||
GrafPort = RECORD
|
||||
portInfo : LocInfo;
|
||||
portRect : Rect; { PortRect }
|
||||
clipRgn : RgnHandle; { Clip Rgn. Pointer }
|
||||
visRgn : RgnHandle; { Vis. Rgn. Pointer }
|
||||
bkPat : Pattern; { BackGround Pattern }
|
||||
pnLoc : Point; { Pen Location }
|
||||
pnSize : Point; { Pen Size }
|
||||
pnMode : Integer; { Pen Mode }
|
||||
pnPat : Pattern; { Pen Pattern }
|
||||
pnMask : Mask; { Pen Mask }
|
||||
pnVis : Integer; { Pen Visable }
|
||||
fontHandle : FontHndl;
|
||||
gfontID : FontID; { Font ID }
|
||||
fontFlags : Integer; { FontFlags }
|
||||
txSize : Integer; { Text Size }
|
||||
txFace : TextStyle; { Text Face }
|
||||
txMode : Integer; { Text Mode }
|
||||
spExtra : Fixed; { Fixed Point Value }
|
||||
chExtra : Fixed; { Fixed Point Value }
|
||||
fgColor : Integer; { ForeGround Color }
|
||||
bgColor : Integer; { BackGround Color }
|
||||
picSave : Handle; { PicSave }
|
||||
rgnSave : Handle; { RgnSave }
|
||||
polySave : Handle; { PolySave }
|
||||
grafProcs : QDProcsPtr;
|
||||
arcRot : Integer; { ArcRot }
|
||||
userField : Longint; { UserField }
|
||||
sysField : Longint; { SysField }
|
||||
END;
|
||||
PaintParamHndl = ^PaintParamPtr;
|
||||
PaintParamPtr = ^PaintParam;
|
||||
PaintParam = RECORD
|
||||
ptrToSourceLocInfo : LocInfoPtr;
|
||||
ptrToDestLocInfo : LocInfoPtr;
|
||||
ptrToSourceRect : RectPtr;
|
||||
ptrToDestPoint : PointPtr;
|
||||
mode : Integer;
|
||||
maskHandle : Handle; { clip region }
|
||||
END;
|
||||
PenStateHndl = ^PenStatePtr;
|
||||
PenStatePtr = ^PenState;
|
||||
PenState = RECORD
|
||||
psPnSize : Point;
|
||||
psPnMode : Integer;
|
||||
psPnPat : Pattern;
|
||||
psPnMask : Mask;
|
||||
END;
|
||||
RomFontRecHndl = ^RomFontRecPtr;
|
||||
RomFontRecPtr = ^RomFontRec;
|
||||
RomFontRec = RECORD
|
||||
rfFamNum : Integer;
|
||||
rfFamStyle : Integer;
|
||||
rfSize : Integer;
|
||||
rfFontHandle : FontHndl;
|
||||
rfNamePtr : Ptr;
|
||||
rfFBRExtent : Integer;
|
||||
END;
|
||||
ColorTableHndl = ^ColorTablePtr;
|
||||
ColorTablePtr = ^ColorTable;
|
||||
ColorTable = RECORD
|
||||
entries : ARRAY[1..16] OF Integer;
|
||||
END;
|
||||
PROCEDURE QDBootInit ; Tool $04,$01;
|
||||
PROCEDURE QDStartUp ( dPageAddr:Integer; masterSCB:Integer; maxWidth:Integer;
|
||||
userID:Integer) ; Tool $04,$02;
|
||||
PROCEDURE QDShutDown ; Tool $04,$03;
|
||||
FUNCTION QDVersion : Integer ; Tool $04,$04;
|
||||
PROCEDURE QDReset ; Tool $04,$05;
|
||||
FUNCTION QDStatus : Boolean ; Tool $04,$06;
|
||||
PROCEDURE AddPt (VAR srcPtPtr:Point;VAR destPtPtr:Point) ; Tool $04,$80;
|
||||
PROCEDURE CharBounds ( theChar:CHAR;VAR resultPtr:Rect) ; Tool $04,$AC;
|
||||
FUNCTION CharWidth ( theChar:CHAR) : Integer ; Tool $04,$A8;
|
||||
PROCEDURE ClearScreen ( colorWord:Integer) ; Tool $04,$15;
|
||||
PROCEDURE ClipRect ( rectPtr:Rect) ; Tool $04,$26;
|
||||
PROCEDURE ClosePoly ; Tool $04,$C2;
|
||||
PROCEDURE ClosePort ( portPtr:GrafPortPtr) ; Tool $04,$1A;
|
||||
PROCEDURE CloseRgn ( aRgnHandle:RgnHandle) ; Tool $04,$6E;
|
||||
PROCEDURE CopyRgn ( srcRgnHandle:RgnHandle; destRgnHandle:RgnHandle) ; Tool
|
||||
$04,$69;
|
||||
PROCEDURE CStringBounds ( cStringPtr:Ptr;VAR resultRect:Rect) ; Tool $04,$AE;
|
||||
FUNCTION CStringWidth ( cStringPtr:Ptr) : Integer ; Tool $04,$AA;
|
||||
PROCEDURE DiffRgn ( rgn1Handle:RgnHandle; rgn2Handle:RgnHandle;
|
||||
diffRgnHandle:RgnHandle) ; Tool $04,$73;
|
||||
PROCEDURE DisposeRgn ( aRgnHandle:RgnHandle) ; Tool $04,$68;
|
||||
PROCEDURE DrawChar ( theChar:CHAR) ; Tool $04,$A4;
|
||||
PROCEDURE DrawCString ( cStrPtr:CStringPtr) ; Tool $04,$A6;
|
||||
PROCEDURE DrawString ( str:Str255) ; Tool $04,$A5;
|
||||
PROCEDURE DrawText ( textPtr:Ptr; textLength:Integer) ; Tool $04,$A7;
|
||||
FUNCTION NotEmptyRect ( rectPtr:Rect) : Boolean ; Tool $04,$52;
|
||||
FUNCTION EmptyRgn ( aRgnHandle:RgnHandle) : Boolean ; Tool $04,$78;
|
||||
FUNCTION EqualPt (VAR point1Ptr:Point;VAR point2Ptr:Point) : Boolean ; Tool
|
||||
$04,$83;
|
||||
FUNCTION EqualRect ( rect1Ptr:Rect; rect2Ptr:Rect) : Boolean ; Tool $04,$51;
|
||||
FUNCTION EqualRgn ( rgn1Handle:RgnHandle; rgn2Handle:RgnHandle) : Boolean ;
|
||||
Tool $04,$77;
|
||||
PROCEDURE EraseArc ( rectPtr:Rect; startAngle:Integer; arcAngle:Integer) ;
|
||||
Tool $04,$64;
|
||||
PROCEDURE EraseOval ( rectPtr:Rect) ; Tool $04,$5A;
|
||||
PROCEDURE ErasePoly ( polyHandle:Handle) ; Tool $04,$BE;
|
||||
PROCEDURE EraseRect ( rectPtr:Rect) ; Tool $04,$55;
|
||||
PROCEDURE EraseRgn ( aRgnHandle:RgnHandle) ; Tool $04,$7B;
|
||||
PROCEDURE EraseRRect ( rectPtr:Rect; ovalWidth:Integer; ovalHeight:Integer) ;
|
||||
Tool $04,$5F;
|
||||
PROCEDURE FillArc ( rectPtr:Rect; startAngle:Integer; arcAngle:Integer;
|
||||
patternPtr:Pattern) ; Tool $04,$66;
|
||||
PROCEDURE FillOval ( rectPtr:Rect; patternPtr:Pattern) ; Tool $04,$5C;
|
||||
PROCEDURE FillPoly ( polyHandle:Handle; patternPtr:Pattern) ; Tool $04,$C0;
|
||||
PROCEDURE FillRect ( rectPtr:Rect; patternPtr:Pattern) ; Tool $04,$57;
|
||||
PROCEDURE FillRgn ( aRgnHandle:RgnHandle; patternPtr:Pattern) ; Tool $04,$7D;
|
||||
PROCEDURE FillRRect ( rectPtr:Rect; ovalWidth:Integer; ovalHeight:Integer;
|
||||
patternPtr:Pattern) ; Tool $04,$61;
|
||||
PROCEDURE ForceBufDims ( maxWidth:Integer; maxFontHeight:Integer;
|
||||
maxFBRExtent:Integer) ; Tool $04,$CC;
|
||||
PROCEDURE FrameArc ( rectPtr:Rect; startAngle:Integer; arcAngle:Integer) ;
|
||||
Tool $04,$62;
|
||||
PROCEDURE FrameOval ( rectPtr:Rect) ; Tool $04,$58;
|
||||
PROCEDURE FramePoly ( polyHandle:Handle) ; Tool $04,$BC;
|
||||
PROCEDURE FrameRect ( rectPtr:Rect) ; Tool $04,$53;
|
||||
PROCEDURE FrameRgn ( aRgnHandle:RgnHandle) ; Tool $04,$79;
|
||||
PROCEDURE FrameRRect ( rectPtr:Rect; ovalWidth:Integer; ovalHeight:Integer) ;
|
||||
Tool $04,$5D;
|
||||
FUNCTION GetAddress ( tableID:Integer) : Ptr ; Tool $04,$09;
|
||||
FUNCTION GetArcRot : Integer ; Tool $04,$B1;
|
||||
FUNCTION GetBackColor : Integer ; Tool $04,$A3;
|
||||
PROCEDURE GetBackPat (VAR patternPtr:Pattern) ; Tool $04,$35;
|
||||
FUNCTION GetCharExtra : Fixed ; Tool $04,$D5;
|
||||
PROCEDURE GetClip ( aRgnHandle:RgnHandle) ; Tool $04,$25;
|
||||
FUNCTION GetClipHandle : RgnHandle ; Tool $04,$C7;
|
||||
FUNCTION GetColorEntry ( tableNumber:Integer; entryNumber:Integer) : Integer ;
|
||||
Tool $04,$11;
|
||||
PROCEDURE GetColorTable ( tableNumber:Integer;VAR destTablePtr:ColorTable) ;
|
||||
Tool $04,$0F;
|
||||
FUNCTION GetCursorAdr : CursorPtr ; Tool $04,$8F;
|
||||
FUNCTION GetFGSize : Integer ; Tool $04,$CF;
|
||||
FUNCTION GetFont : FontHndl ; Tool $04,$95;
|
||||
FUNCTION GetFontFlags : Integer ; Tool $04,$99;
|
||||
PROCEDURE GetFontGlobals (VAR fgRecPtr:FontGlobalsRecord) ; Tool $04,$97;
|
||||
FUNCTION GetFontID : FontID ; Tool $04,$D1;
|
||||
PROCEDURE GetFontInfo (VAR fontInfoRecPtr:FontInfoRecord) ; Tool $04,$96;
|
||||
FUNCTION GetFontLore (VAR recordPtr:FontGlobalsRecord; recordSize:Integer) :
|
||||
Integer ; Tool $04,$D9;
|
||||
FUNCTION GetForeColor : Integer ; Tool $04,$A1;
|
||||
FUNCTION GetGrafProcs : QDProcsPtr ; Tool $04,$45;
|
||||
FUNCTION GetMasterSCB : Integer ; Tool $04,$17;
|
||||
PROCEDURE GetPen (VAR pointPtr:Point) ; Tool $04,$29;
|
||||
PROCEDURE GetPenMask (VAR maskPtr:Mask) ; Tool $04,$33;
|
||||
FUNCTION GetPenMode : Integer ; Tool $04,$2F;
|
||||
PROCEDURE GetPenPat (VAR patternPtr:Pattern) ; Tool $04,$31;
|
||||
PROCEDURE GetPenSize (VAR pointPtr:Point) ; Tool $04,$2D;
|
||||
PROCEDURE GetPenState (VAR U__penStatePtr:PenState) ; Tool $04,$2B;
|
||||
FUNCTION GetPicSave : Longint ; Tool $04,$3F;
|
||||
FUNCTION GetPixel ( h:Integer; v:Integer) : Integer ; Tool $04,$88;
|
||||
FUNCTION GetPolySave : Longint ; Tool $04,$43;
|
||||
FUNCTION GetPort : GrafPortPtr ; Tool $04,$1C;
|
||||
PROCEDURE GetPortLoc (VAR locInfoPtr:LocInfo) ; Tool $04,$1E;
|
||||
PROCEDURE GetPortRect (VAR U__rectPtr:Rect) ; Tool $04,$20;
|
||||
FUNCTION GetRgnSave : Longint ; Tool $04,$41;
|
||||
PROCEDURE GetROMFont (VAR recordPtr:RomFontRec) ; Tool $04,$D8;
|
||||
FUNCTION GetSCB ( scanLine:Integer) : Integer ; Tool $04,$13;
|
||||
FUNCTION GetSpaceExtra : Fixed ; Tool $04,$9F;
|
||||
FUNCTION GetStandardSCB : Integer ; Tool $04,$0C;
|
||||
FUNCTION GetSysField : Longint ; Tool $04,$49;
|
||||
FUNCTION GetSysFont : FontHndl ; Tool $04,$B3;
|
||||
FUNCTION GetTextFace : TextStyle ; Tool $04,$9B;
|
||||
FUNCTION GetTextMode : Integer ; Tool $04,$9D;
|
||||
FUNCTION GetTextSize : Integer ; Tool $04,$D3;
|
||||
FUNCTION GetUserField : Longint ; Tool $04,$47;
|
||||
FUNCTION GetVisHandle : RgnHandle ; Tool $04,$C9;
|
||||
PROCEDURE GetVisRgn ( aRgnHandle:RgnHandle) ; Tool $04,$B5;
|
||||
PROCEDURE GlobalToLocal (VAR pointPtr:Point) ; Tool $04,$85;
|
||||
PROCEDURE GrafOff ; Tool $04,$0B;
|
||||
PROCEDURE GrafOn ; Tool $04,$0A;
|
||||
PROCEDURE HideCursor ; Tool $04,$90;
|
||||
PROCEDURE HidePen ; Tool $04,$27;
|
||||
PROCEDURE InflateTextBuffer ( newWidth:Integer; newHeight:Integer) ; Tool
|
||||
$04,$D7;
|
||||
PROCEDURE InitColorTable (VAR tablePtr:ColorTable) ; Tool $04,$0D;
|
||||
PROCEDURE InitCursor ; Tool $04,$CA;
|
||||
PROCEDURE InitPort ( portPtr:GrafPortPtr) ; Tool $04,$19;
|
||||
PROCEDURE InsetRect (VAR U__rectPtr:Rect; deltaH:Integer; deltaV:Integer) ;
|
||||
Tool $04,$4C;
|
||||
PROCEDURE InsetRgn ( aRgnHandle:RgnHandle; dH:Integer; dV:Integer) ; Tool
|
||||
$04,$70;
|
||||
PROCEDURE InvertArc ( rectPtr:Rect; startAngle:Integer; arcAngle:Integer) ;
|
||||
Tool $04,$65;
|
||||
PROCEDURE InvertOval ( rectPtr:Rect) ; Tool $04,$5B;
|
||||
PROCEDURE InvertPoly ( polyHandle:Handle) ; Tool $04,$BF;
|
||||
PROCEDURE InvertRect ( rectPtr:Rect) ; Tool $04,$56;
|
||||
PROCEDURE InvertRgn ( aRgnHandle:RgnHandle) ; Tool $04,$7C;
|
||||
PROCEDURE InvertRRect ( rectPtr:Rect; ovalWidth:Integer; ovalHeight:Integer) ;
|
||||
Tool $04,$60;
|
||||
PROCEDURE KillPoly ( polyHandle:Handle) ; Tool $04,$C3;
|
||||
PROCEDURE Line ( dH:Integer; dV:Integer) ; Tool $04,$3D;
|
||||
PROCEDURE LineTo ( h:Integer; v:Integer) ; Tool $04,$3C;
|
||||
PROCEDURE LocalToGlobal (VAR pointPtr:Point) ; Tool $04,$84;
|
||||
PROCEDURE MapPoly ( polyHandle:Handle; srcRectPtr:Rect; destRectPtr:Rect) ;
|
||||
Tool $04,$C5;
|
||||
PROCEDURE MapPt (VAR pointPtr:Point; srcRectPtr:Rect; destRectPtr:Rect) ; Tool
|
||||
$04,$8A;
|
||||
PROCEDURE MapRect (VAR rectPtr:Rect; srcRectPtr:Rect; destRectPtr:Rect) ; Tool
|
||||
$04,$8B;
|
||||
PROCEDURE MapRgn ( aRgnHandle:RgnHandle; srcRectPtr:Rect; destdRectPtr:Rect) ;
|
||||
Tool $04,$8C;
|
||||
PROCEDURE Move ( dH:Integer; dV:Integer) ; Tool $04,$3B;
|
||||
PROCEDURE MovePortTo ( h:Integer; v:Integer) ; Tool $04,$22;
|
||||
PROCEDURE MoveTo ( h:Integer; v:Integer) ; Tool $04,$3A;
|
||||
FUNCTION NewRgn : RgnHandle ; Tool $04,$67;
|
||||
PROCEDURE ObscureCursor ; Tool $04,$92;
|
||||
PROCEDURE OffsetPoly ( polyHandle:Handle; dH:Integer; dV:Integer) ; Tool
|
||||
$04,$C4;
|
||||
PROCEDURE OffsetRect (VAR U__rectPtr:Rect; deltaH:Integer; deltaV:Integer) ;
|
||||
Tool $04,$4B;
|
||||
PROCEDURE OffsetRgn ( aRgnHandle:RgnHandle; dH:Integer; dV:Integer) ; Tool
|
||||
$04,$6F;
|
||||
FUNCTION OpenPoly : handle ; Tool $04,$C1;
|
||||
PROCEDURE OpenPort ( portPtr:GrafPortPtr) ; Tool $04,$18;
|
||||
PROCEDURE OpenRgn ; Tool $04,$6D;
|
||||
PROCEDURE PaintArc ( rectPtr:Rect; startAngle:Integer; arcAngle:Integer) ;
|
||||
Tool $04,$63;
|
||||
PROCEDURE PaintOval ( rectPtr:Rect) ; Tool $04,$59;
|
||||
PROCEDURE PaintPixels ( U__paintParamPtr:PaintParam) ; Tool $04,$7F;
|
||||
PROCEDURE PaintPoly ( polyHandle:Handle) ; Tool $04,$BD;
|
||||
PROCEDURE PaintRect ( rectPtr:Rect) ; Tool $04,$54;
|
||||
PROCEDURE PaintRgn ( aRgnHandle:RgnHandle) ; Tool $04,$7A;
|
||||
PROCEDURE PaintRRect ( rectPtr:Rect; ovalWidth:Integer; ovalHeight:Integer) ;
|
||||
Tool $04,$5E;
|
||||
PROCEDURE PenNormal ; Tool $04,$36;
|
||||
PROCEDURE PPToPort ( srcLocPtr:LocInfoPtr; srcRectPtr:Rect; destX:Integer;
|
||||
destY:Integer; transferMode:Integer) ; Tool $04,$D6;
|
||||
PROCEDURE Pt2Rect (VAR point1Ptr:Point;VAR point2Ptr:Point;VAR U__rectPtr:Rect)
|
||||
; Tool $04,$50;
|
||||
FUNCTION PtInRect (VAR pointPtr:Point; rectPtr:Rect) : Boolean ; Tool $04,$4F;
|
||||
FUNCTION PtInRgn (VAR pointPtr:Point; aRgnHandle:RgnHandle) : Boolean ; Tool
|
||||
$04,$75;
|
||||
FUNCTION Random : Integer ; Tool $04,$86;
|
||||
FUNCTION RectInRgn ( rectPtr:Rect; aRgnHandle:RgnHandle) : Boolean ; Tool
|
||||
$04,$76;
|
||||
PROCEDURE RectRgn ( aRgnHandle:RgnHandle; rectPtr:Rect) ; Tool $04,$6C;
|
||||
PROCEDURE RestoreBufDims ( sizeInfoPtr:BufDimRecPtr) ; Tool $04,$CE;
|
||||
PROCEDURE SaveBufDims (VAR sizeInfoPtr:BufDimRec) ; Tool $04,$CD;
|
||||
PROCEDURE ScalePt (VAR pointPtr:Point; srcRectPtr:Rect; destRectPtr:Rect) ;
|
||||
Tool $04,$89;
|
||||
PROCEDURE ScrollRect ( rectPtr:Rect; dH:Integer; dV:Integer;
|
||||
aRgnHandle:RgnHandle) ; Tool $04,$7E;
|
||||
FUNCTION SectRect ( rect1Ptr:Rect; rect2Ptr:Rect;VAR intersectRectPtr:Rect) :
|
||||
Boolean ; Tool $04,$4D;
|
||||
PROCEDURE SectRgn ( rgn1Handle:RgnHandle; rgn2Handle:RgnHandle;
|
||||
destRgnHandle:RgnHandle) ; Tool $04,$71;
|
||||
PROCEDURE SetAllSCBs ( newSCB:Integer) ; Tool $04,$14;
|
||||
PROCEDURE SetArcRot ; Tool $04,$B0;
|
||||
PROCEDURE SetBackColor ( backColor:Integer) ; Tool $04,$A2;
|
||||
PROCEDURE SetBackPat ( patternPtr:Pattern) ; Tool $04,$34;
|
||||
PROCEDURE SetBufDims ( maxWidth:Integer; maxFontHeight:Integer;
|
||||
maxFBRExtent:Integer) ; Tool $04,$CB;
|
||||
PROCEDURE SetCharExtra ( charExtra:Fixed) ; Tool $04,$D4;
|
||||
PROCEDURE SetClip ( aRgnHandle:RgnHandle) ; Tool $04,$24;
|
||||
PROCEDURE SetClipHandle ( aRgnHandle:RgnHandle) ; Tool $04,$C6;
|
||||
PROCEDURE SetColorEntry ( tableNumber:Integer; entryNumber:Integer;
|
||||
newColor:ColorValue) ; Tool $04,$10;
|
||||
PROCEDURE SetColorTable ( tableNumber:Integer; srcTablePtr:ColorTable) ; Tool
|
||||
$04,$0E;
|
||||
PROCEDURE SetCursor ( theCursorPtr:Cursor) ; Tool $04,$8E;
|
||||
PROCEDURE SetEmptyRgn ( aRgnHandle:RgnHandle) ; Tool $04,$6A;
|
||||
PROCEDURE SetFont ( newFontHandle:FontHndl) ; Tool $04,$94;
|
||||
PROCEDURE SetFontFlags ( fontFlags:Integer) ; Tool $04,$98;
|
||||
PROCEDURE SetFontID (VAR U__fontID:FontID) ; Tool $04,$D0;
|
||||
PROCEDURE SetForeColor ( foreColor:Integer) ; Tool $04,$A0;
|
||||
PROCEDURE SetGrafProcs ( grafProcsPtr:QDProcsPtr) ; Tool $04,$44;
|
||||
PROCEDURE SetIntUse ( useInt:Integer) ; Tool $04,$B6;
|
||||
PROCEDURE SetMasterSCB ( masterSCB:Integer) ; Tool $04,$16;
|
||||
PROCEDURE SetOrigin ( h:Integer; v:Integer) ; Tool $04,$23;
|
||||
PROCEDURE SetPenMask ( maskPtr:Mask) ; Tool $04,$32;
|
||||
PROCEDURE SetPenMode ( penMode:Integer) ; Tool $04,$2E;
|
||||
PROCEDURE SetPenPat ( patternPtr:Pattern) ; Tool $04,$30;
|
||||
PROCEDURE SetPenSize ( penWidth:Integer; penHeight:Integer) ; Tool $04,$2C;
|
||||
PROCEDURE SetPenState (VAR U__penStatePtr:PenState) ; Tool $04,$2A;
|
||||
PROCEDURE SetPicSave ( picSaveValue:Longint) ; Tool $04,$3E;
|
||||
PROCEDURE SetPolySave ( polySaveValue:Longint) ; Tool $04,$42;
|
||||
PROCEDURE SetPort ( portPtr:GrafPortPtr) ; Tool $04,$1B;
|
||||
PROCEDURE SetPortLoc ( U__locInfoPtr:LocInfo) ; Tool $04,$1D;
|
||||
PROCEDURE SetPortRect ( rectPtr:Rect) ; Tool $04,$1F;
|
||||
PROCEDURE SetPortSize ( portWidth:Integer; portHeight:Integer) ; Tool $04,$21;
|
||||
PROCEDURE SetPt (VAR srcPtPtr:Point; h:Integer; v:Integer) ; Tool $04,$82;
|
||||
PROCEDURE SetRandSeed ( randomSeed:Longint) ; Tool $04,$87;
|
||||
PROCEDURE SetRect (VAR aRectPtr:Rect; left:Integer; top:Integer; right:Integer;
|
||||
bottom:Integer) ; Tool $04,$4A;
|
||||
PROCEDURE SetRectRgn ( aRgnHandle:RgnHandle; left:Integer; top:Integer;
|
||||
right:Integer; bottom:Integer) ; Tool $04,$6B;
|
||||
PROCEDURE SetRgnSave ( rgnSaveValue:Longint) ; Tool $04,$40;
|
||||
PROCEDURE SetSCB ( scanLine:Integer; newSCB:Integer) ; Tool $04,$12;
|
||||
PROCEDURE SetSolidBackPat ( colorNum:Integer) ; Tool $04,$38;
|
||||
PROCEDURE SetSolidPenPat ( colorNum:Integer) ; Tool $04,$37;
|
||||
PROCEDURE SetSpaceExtra ( spaceExtra:Fixed) ; Tool $04,$9E;
|
||||
PROCEDURE SetStdProcs ( stdProcRecPtr:QDProcsPtr) ; Tool $04,$8D;
|
||||
PROCEDURE SetSysField ( sysFieldValue:Longint) ; Tool $04,$48;
|
||||
PROCEDURE SetSysFont ( fontHandle:FontHndl) ; Tool $04,$B2;
|
||||
PROCEDURE SetTextFace ( textFace:TextStyle) ; Tool $04,$9A;
|
||||
PROCEDURE SetTextMode ( textMode:Integer) ; Tool $04,$9C;
|
||||
PROCEDURE SetTextSize ( textSize:Integer) ; Tool $04,$D2;
|
||||
PROCEDURE SetUserField ( userFieldValue:Longint) ; Tool $04,$46;
|
||||
PROCEDURE SetVisHandle ( aRgnHandle:RgnHandle) ; Tool $04,$C8;
|
||||
PROCEDURE SetVisRgn ( aRgnHandle:RgnHandle) ; Tool $04,$B4;
|
||||
PROCEDURE ShowCursor ; Tool $04,$91;
|
||||
PROCEDURE ShowPen ; Tool $04,$28;
|
||||
PROCEDURE SolidPattern ( colorNum:Integer;VAR patternPtr:Pattern) ; Tool
|
||||
$04,$39;
|
||||
PROCEDURE StringBounds ( str:Str255;VAR resultPtr:Rect) ; Tool $04,$AD;
|
||||
FUNCTION StringWidth ( str:Str255) : Integer ; Tool $04,$A9;
|
||||
PROCEDURE SubPt (VAR srcPtPtr:Point;VAR destPtPtr:Point) ; Tool $04,$81;
|
||||
PROCEDURE TextBounds ( textPtr:Ptr; textLength:Integer;VAR resultPtr:Rect) ;
|
||||
Tool $04,$AF;
|
||||
FUNCTION TextWidth ( textPtr:Ptr; textLength:Integer) : Integer ; Tool $04,$AB;
|
||||
PROCEDURE UnionRect ( rect1Ptr:Rect; rect2Ptr:Rect;VAR unionRectPtr:Rect) ;
|
||||
Tool $04,$4E;
|
||||
PROCEDURE UnionRgn ( rgn1Handle:RgnHandle; rgn2Handle:RgnHandle;
|
||||
unionRgnHandle:RgnHandle) ; Tool $04,$72;
|
||||
PROCEDURE XorRgn ( rgn1Handle:RgnHandle; rgn2Handle:RgnHandle;
|
||||
xorRgnHandle:RgnHandle) ; Tool $04,$74;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,184 @@
|
|||
{********************************************
|
||||
; File: Resources.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT RESOURCES;
|
||||
INTERFACE
|
||||
USES TYPES,MEMORY,GSOS;
|
||||
CONST
|
||||
|
||||
resLogOut = $0; {ResourceConverter - }
|
||||
resLogIn = $1; {ResourceConverter - }
|
||||
resLogApp = $0; {ResourceConverter - }
|
||||
resLogSys = $2; {ResourceConverter - }
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
resForkUsed = $1E01; {Error - Resource fork not empty }
|
||||
resBadFormat = $1E02; {Error - Format of resource fork is unknown }
|
||||
resForkEmpty = $1E03; {Error - Resource fork is empty }
|
||||
resNoCurFile = $1E04; {Error - there are no current open resource files }
|
||||
resDupID = $1E05; {Error - ID is already used }
|
||||
resNotFound = $1E06; {Error - resource was not found }
|
||||
resFileNotFound = $1E07; {Error - resource file not found }
|
||||
resBadAppID = $1E08; {Error - User ID not found, please call ResourceStartup }
|
||||
resNoUniqueID = $1E09; {Error - a unique ID was not found }
|
||||
resBadAttr = $1E0A; {Error - reseved bits in attributes word are not zero }
|
||||
resHashGone = $1E0B; {Error - the hash count table is no longer valid }
|
||||
resIndexRange = $1E0D; {Error - index is out of range }
|
||||
resNoCurApp = $1E0E; {Error - no current application, please call
|
||||
ResourceStartup }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
resChanged = $0020; {Resources - }
|
||||
resPreLoad = $0040; {Resources - }
|
||||
resProtected = $0080; {Resources - }
|
||||
resAbsLoad = $0400; {Resources - }
|
||||
resConverter = $0800; {Resources - }
|
||||
resMemAttr = $C3F1; {Resources - }
|
||||
systemMap = $0001; {Resources - }
|
||||
mapChanged = $0002; {Resources - }
|
||||
romMap = $0004; {Resources - }
|
||||
resNameOffset = $10000; {Resources - type holding names }
|
||||
resNameVersion = $0001; {Resources - }
|
||||
rIcon = $8001; {Resources - resource type holding names }
|
||||
rPicture = $8002; {Resources - resource type holding names }
|
||||
rControlList = $8003; {Resources - resource type holding names }
|
||||
rControlTemplate = $8004; {Resources - resource type holding names }
|
||||
rWindow = $8005; {Resources - resource type holding names }
|
||||
rString = $8006; {Resources - resource type holding names }
|
||||
rStringList = $8007; {Resources - resource type holding names }
|
||||
rMenuBar = $8008; {Resources - resource type holding names }
|
||||
rMenu = $8009; {Resources - resource type holding names }
|
||||
rMenuItem = $800A; {Resources - resource type holding names }
|
||||
rTextForLETextBox2 = $800B; {Resources - resource type holding names }
|
||||
rCtlDefProc = $800C; {Resources - resource type holding names }
|
||||
rCtlColorTbl = $800D; {Resources - resource type holding names }
|
||||
rWindParam1 = $800E; {Resources - resource type holding names }
|
||||
rWindParam2 = $800F; {Resources - resource type holding names }
|
||||
rWindColor = $8010; {Resources - resource type holding names }
|
||||
rResName = $8014; {Resources - resource type holding names }
|
||||
|
||||
TYPE
|
||||
ResID = Longint ;
|
||||
ResType = Integer ;
|
||||
ResAttr = Integer ;
|
||||
|
||||
|
||||
ResHeaderRec = RECORD
|
||||
rFileVersion : Longint; { Format version of resource fork }
|
||||
rFileToMap : Longint; { Offset from start to resource map record }
|
||||
rFileMapSize : Longint; { Number of bytes map occupies in file }
|
||||
rFileMemo : PACKED ARRAY[1..128] OF Byte; { Reserved space for application
|
||||
}
|
||||
rFileRecSize : Longint; { Size of ResHeaderRec Record }
|
||||
END;
|
||||
FreeBlockRec = RECORD
|
||||
blkOffset : Longint;
|
||||
blkSize : Longint;
|
||||
END;
|
||||
ResMapHandle = ^ResMapPtr;
|
||||
ResMapPtr = ^ResMap;
|
||||
ResMap = RECORD
|
||||
mapNext : ResMapHandle; { Handle to next resource map }
|
||||
mapFlag : Integer; { Bit Flags }
|
||||
mapOffset : Longint; { Map's file position }
|
||||
mapSize : Longint; { Number of bytes map occupies in file }
|
||||
mapToIndex : Integer;
|
||||
mapFileNum : Integer;
|
||||
mapID : Integer;
|
||||
mapIndexSize : Longint;
|
||||
mapIndexUsed : Longint;
|
||||
mapFreeListSize : Integer;
|
||||
mapFreeListUsed : Integer;
|
||||
mapFreeList : ARRAY[1..1] OF FreeBlockRec; { n bytes (array of free block
|
||||
records) }
|
||||
END;
|
||||
ResRefRecPtr = ^ResRefRec;
|
||||
ResRefRec = RECORD
|
||||
fResType : ResType;
|
||||
fResID : ResID;
|
||||
fResOffset : Longint;
|
||||
fResAttr : ResAttr;
|
||||
fResSize : Longint;
|
||||
fResHandle : Handle;
|
||||
END;
|
||||
ResourceSpec = RECORD
|
||||
resourceType : ResType;
|
||||
resourceID : ResID;
|
||||
END;
|
||||
ResNameEntryPtr = ^ResNameEntry;
|
||||
ResNameEntry = RECORD
|
||||
namedResID : ResID;
|
||||
resName : Str255;
|
||||
END;
|
||||
ResNameRecordHandle = ^ResNameRecordPtr;
|
||||
ResNameRecordPtr = ^ResNameRecord;
|
||||
ResNameRecord = RECORD
|
||||
version : Integer;
|
||||
nameCount : Longint;
|
||||
resNameEntries : ARRAY[1..1] OF ResNameEntry;
|
||||
END;
|
||||
PROCEDURE ResourceBootInit ; Tool $1E,$01;
|
||||
PROCEDURE ResourceStartup ( userID:Integer) ; Tool $1E,$02;
|
||||
PROCEDURE ResourceShutdown ; Tool $1E,$03;
|
||||
FUNCTION ResourceVersion : Integer ; Tool $1E,$04;
|
||||
PROCEDURE ResourceReset ; Tool $1E,$05;
|
||||
FUNCTION ResourceStatus : Boolean ; Tool $1E,$06;
|
||||
PROCEDURE AddResource ( resourceHandle:Handle; resourceAttr:ResAttr;
|
||||
resourceType:ResType; resourceID:ResID) ; Tool $1E,$0C;
|
||||
PROCEDURE CloseResourceFile ( fileID:Integer) ; Tool $1E,$0B;
|
||||
FUNCTION CountResources ( resourceType:ResType) : Longint ; Tool $1E,$22;
|
||||
FUNCTION CountTypes : Integer ; Tool $1E,$20;
|
||||
PROCEDURE CreateResourceFile ( auxType:Longint; fileType:Integer;
|
||||
fileAccess:Integer; fileName:GSString255Ptr) ; Tool $1E,$09;
|
||||
PROCEDURE DetachResource ( resourceType:ResType; resourceID:ResID) ; Tool
|
||||
$1E,$18;
|
||||
FUNCTION GetCurResourceApp : Integer ; Tool $1E,$14;
|
||||
FUNCTION GetCurResourceFile : Integer ; Tool $1E,$12;
|
||||
FUNCTION GetIndResource ( resourceType:ResType; resourceIndex:Longint) : ResID
|
||||
; Tool $1E,$23;
|
||||
FUNCTION GetIndType ( typeIndex:Integer) : ResType ; Tool $1E,$21;
|
||||
FUNCTION GetMapHandle ( fileID:Integer) : ResMapHandle ; Tool $1E,$26;
|
||||
FUNCTION GetOpenFileRefNum ( fileID:Integer) : Integer ; Tool $1E,$1F;
|
||||
FUNCTION GetResourceAttr ( resourceType:ResType; resourceID:ResID) : ResAttr ;
|
||||
Tool $1E,$1B;
|
||||
FUNCTION GetResourceSize ( resourceType:ResType; currentID:ResID) : Longint ;
|
||||
Tool $1E,$1D;
|
||||
FUNCTION HomeResourceFile ( resourceType:ResType; resourceID:ResID) : Integer ;
|
||||
Tool $1E,$15;
|
||||
FUNCTION LoadAbsResource ( loadAddress:Longint; maxSize:Longint;
|
||||
resourceType:ResType; resourceID:ResID) : Handle ; Tool $1E,$27;
|
||||
FUNCTION LoadResource ( resourceType:ResType; resourceID:ResID) : Handle ; Tool
|
||||
$1E,$0E;
|
||||
PROCEDURE MarkResourceChange ( U__changeFlag:Boolean; resourceType:ResType;
|
||||
resourceID:ResID) ; Tool $1E,$10;
|
||||
PROCEDURE MatchResourceHandle ( foundRec:Ptr; resourceHandle:Handle) ; Tool
|
||||
$1E,$1E;
|
||||
FUNCTION OpenResourceFile ( openAccess:Integer; resourceMapPtr:ResMapPtr;
|
||||
fileName:GSString255Ptr) : Integer ; Tool $1E,$0A;
|
||||
PROCEDURE ReleaseResource ( purgeLevel:Integer; resourceType:ResType;
|
||||
resourceID:ResID) ; Tool $1E,$17;
|
||||
PROCEDURE RemoveResource ( resourceType:ResType; resourceID:ResID) ; Tool
|
||||
$1E,$0F;
|
||||
PROCEDURE ResourceConverter ( converterProc:ProcPtr; resourceType:ResType;
|
||||
logFlags:Integer) ; Tool $1E,$28;
|
||||
PROCEDURE SetCurResourceApp ( userID:Integer) ; Tool $1E,$13;
|
||||
PROCEDURE SetCurResourceFile ( fileID:Integer) ; Tool $1E,$11;
|
||||
PROCEDURE SetResourceAttr ( resourceAttr:ResAttr; resourceType:ResType;
|
||||
currentID:ResID) ; Tool $1E,$1C;
|
||||
FUNCTION SetResourceFileDepth ( searchDepth:Integer) : Integer ; Tool $1E,$25;
|
||||
PROCEDURE SetResourceID ( newID:ResID; resourceType:ResType; currentID:ResID)
|
||||
; Tool $1E,$1A;
|
||||
FUNCTION SetResourceLoad ( readFlag:Integer) : Integer ; Tool $1E,$24;
|
||||
FUNCTION UniqueResourceID ( IDrange:Integer; resourceType:ResType) : ResID ;
|
||||
Tool $1E,$19;
|
||||
PROCEDURE UpdateResourceFile ( fileID:Integer) ; Tool $1E,$0D;
|
||||
PROCEDURE WriteResource ( resourceType:ResType; resourceID:ResID) ; Tool
|
||||
$1E,$16;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,222 @@
|
|||
UNIT SANE;
|
||||
|
||||
{ Apple IIGS SANE Interfaces
|
||||
|
||||
See the Apple Numerics Manual for complete documentation
|
||||
|
||||
|
||||
Copyright (c) 1986-1988 by TML Systems, Inc. All Rights Reserved.
|
||||
}
|
||||
|
||||
|
||||
{ The SANE environment word (Integer) is defined as follows:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
INTERFACE
|
||||
|
||||
CONST DecStrLen = 255;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
TYPE
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
{ Standard housekeeping routines }
|
||||
|
||||
PROCEDURE SANEStartUp
|
||||
|
||||
PROCEDURE SANEShutDown;
|
||||
FUNCTION SANEVersion: Integer;
|
||||
PROCEDURE SANEReset;
|
||||
FUNCTION SANEStatus: Integer;
|
||||
|
||||
{ Conversions between numeric binary types }
|
||||
|
||||
FUNCTION Num2Integer
|
||||
|
||||
FUNCTION Num2Longint
|
||||
|
||||
FUNCTION Num2Real
|
||||
|
||||
FUNCTION Num2Double
|
||||
|
||||
FUNCTION Num2Extended
|
||||
|
||||
FUNCTION Num2Comp
|
||||
|
||||
|
||||
{ Conversions between binary and decimal }
|
||||
|
||||
PROCEDURE Num2Dec
|
||||
|
||||
|
||||
|
||||
FUNCTION Dec2Num
|
||||
|
||||
|
||||
{ Conversions between decimal formats }
|
||||
|
||||
PROCEDURE Str2Dec
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE CStr2Dec
|
||||
|
||||
|
||||
|
||||
PROCEDURE Dec2Str
|
||||
|
||||
|
||||
|
||||
|
||||
{ Arithmetic, auxiliary and elementary functions }
|
||||
|
||||
FUNCTION Remainder
|
||||
|
||||
|
||||
FUNCTION Rint
|
||||
|
||||
FUNCTION Scalb
|
||||
|
||||
|
||||
FUNCTION Logb
|
||||
|
||||
FUNCTION Log2
|
||||
|
||||
FUNCTION Ln1
|
||||
|
||||
FUNCTION Exp2
|
||||
|
||||
FUNCTION Exp1
|
||||
|
||||
FUNCTION Tan
|
||||
|
||||
|
||||
FUNCTION CopySign
|
||||
|
||||
FUNCTION NextExtended
|
||||
|
||||
FUNCTION XpwrI
|
||||
|
||||
|
||||
FUNCTION XpwrY
|
||||
|
||||
FUNCTION Compound
|
||||
|
||||
FUNCTION Annuity
|
||||
|
||||
FUNCTION RandomX
|
||||
|
||||
|
||||
{ Inquirty routines }
|
||||
|
||||
FUNCTION ClassReal
|
||||
|
||||
FUNCTION ClassDouble
|
||||
|
||||
FUNCTION ClassComp
|
||||
|
||||
FUNCTION ClassExtended
|
||||
|
||||
FUNCTION SignNum
|
||||
|
||||
|
||||
{ NaN function }
|
||||
|
||||
FUNCTION NAN
|
||||
|
||||
|
||||
{ Environment control routines }
|
||||
|
||||
FUNCTION GetHaltVector: Integer;
|
||||
PROCEDURE SetHaltVector
|
||||
|
||||
|
||||
{ Environment access routines }
|
||||
PROCEDURE SetEnvironment
|
||||
|
||||
PROCEDURE GetEnvironment
|
||||
|
||||
PROCEDURE ProcEntry
|
||||
|
||||
PROCEDURE ProcExit
|
||||
|
||||
|
||||
{ Comparison routine }
|
||||
|
||||
FUNCTION Relation
|
||||
|
||||
|
||||
IMPLEMENTATION
|
||||
|
||||
END.
|
|
@ -0,0 +1,22 @@
|
|||
{********************************************
|
||||
; File: Scheduler.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT SCHEDULER;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
PROCEDURE SchBootInit ; Tool $07,$01;
|
||||
PROCEDURE SchStartUp ; Tool $07,$02;
|
||||
PROCEDURE SchShutDown ; Tool $07,$03;
|
||||
FUNCTION SchVersion : Integer ; Tool $07,$04;
|
||||
PROCEDURE SchReset ; Tool $07,$05;
|
||||
FUNCTION SchStatus : Boolean ; Tool $07,$06;
|
||||
FUNCTION SchAddTask ( taskPtr:VoidProcPtr) : Boolean ; Tool $07,$09;
|
||||
PROCEDURE SchFlush ; Tool $07,$0A;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,40 @@
|
|||
{********************************************
|
||||
; File: Scrap.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT SCRAP;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
badScrapType = $1610; {error - No scrap of this type. }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
textScrap = $0000; {scrapType - }
|
||||
picScrap = $0001; {scrapType - }
|
||||
PROCEDURE ScrapBootInit ; Tool $16,$01;
|
||||
PROCEDURE ScrapStartUp ; Tool $16,$02;
|
||||
PROCEDURE ScrapShutDown ; Tool $16,$03;
|
||||
FUNCTION ScrapVersion : Integer ; Tool $16,$04;
|
||||
PROCEDURE ScrapReset ; Tool $16,$05;
|
||||
FUNCTION ScrapStatus : Boolean ; Tool $16,$06;
|
||||
PROCEDURE GetScrap ( destHandle:Handle; scrapType:Integer) ; Tool $16,$0D;
|
||||
FUNCTION GetScrapCount : Integer ; Tool $16,$12;
|
||||
FUNCTION GetScrapHandle ( scrapType:Integer) : handle ; Tool $16,$0E;
|
||||
FUNCTION GetScrapPath : Ptr ; Tool $16,$10;
|
||||
FUNCTION GetScrapSize ( scrapType:Integer) : Longint ; Tool $16,$0F;
|
||||
FUNCTION GetScrapState : Integer ; Tool $16,$13;
|
||||
PROCEDURE LoadScrap ; Tool $16,$0A;
|
||||
PROCEDURE PutScrap ( numBytes:Longint; scrapType:Integer; srcPtr:Ptr) ; Tool
|
||||
$16,$0C;
|
||||
PROCEDURE SetScrapPath ( path:Str255) ; Tool $16,$11;
|
||||
PROCEDURE UnloadScrap ; Tool $16,$09;
|
||||
PROCEDURE ZeroScrap ; Tool $16,$0B;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,115 @@
|
|||
{********************************************
|
||||
; File: Sound.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT SOUND;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
noDOCFndErr = $0810; {error - no DOC chip found }
|
||||
docAddrRngErr = $0811; {error - DOC address range error }
|
||||
noSAppInitErr = $0812; {error - no SAppInit call made }
|
||||
invalGenNumErr = $0813; {error - invalid generator number }
|
||||
synthModeErr = $0814; {error - synthesizer mode error }
|
||||
genBusyErr = $0815; {error - generator busy error }
|
||||
mstrIRQNotAssgnErr = $0817; {error - master IRQ not assigned }
|
||||
sndAlreadyStrtErr = $0818; {error - sound tools already started }
|
||||
unclaimedSndIntErr = $08FF; {error - sound tools already started }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
ffSynthMode = $0001; {channelGenMode - Free form synthesizer mode }
|
||||
noteSynthMode = $0002; {channelGenMode - Note synthesizer mode. }
|
||||
gen0off = $0001; {genMask - param to FFStopSound }
|
||||
gen1off = $0002; {genMask - param to FFStopSound }
|
||||
gen2off = $0004; {genMask - param to FFStopSound }
|
||||
gen3off = $0008; {genMask - param to FFStopSound }
|
||||
gen4off = $0010; {genMask - param to FFStopSound }
|
||||
gen5off = $0020; {genMask - param to FFStopSound }
|
||||
gen6off = $0040; {genMask - param to FFStopSound }
|
||||
gen7off = $0080; {genMask - param to FFStopSound }
|
||||
gen8off = $0100; {genMask - param to FFStopSound }
|
||||
gen9off = $0200; {genMask - param to FFStopSound }
|
||||
gen10off = $0400; {genMask - param to FFStopSound }
|
||||
gen11off = $0800; {genMask - param to FFStopSound }
|
||||
gen12off = $1000; {genMask - param to FFStopSound }
|
||||
gen13off = $2000; {genMask - param to FFStopSound }
|
||||
gen14off = $4000; {genMask - param to FFStopSound }
|
||||
genAvail = $0000; {genStatus - Generator available status }
|
||||
ffSynth = $0100; {genStatus - Free Form Synthesizer status }
|
||||
noteSynth = $0200; {genStatus - Note Synthesizer status }
|
||||
lastBlock = $8000; {genStatus - Last block of wave }
|
||||
smReadRegister = $00; {Jump Table Offset - Read Register routine }
|
||||
smWriteRegister = $04; {Jump Table Offset - Write Register routine }
|
||||
smReadRam = $08; {Jump Table Offset - Read Ram routine }
|
||||
smWriteRam = $0C; {Jump Table Offset - Write Ram routine }
|
||||
smReadNext = $10; {Jump Table Offset - Read Next routine }
|
||||
smWriteNext = $14; {Jump Table Offset - Write Next routine }
|
||||
smOscTable = $18; {Jump Table Offset - Pointer to Oscillator table }
|
||||
smGenTable = $1C; {Jump Table Offset - Pointer to generator table }
|
||||
smGcbAddrTable = $20; {Jump Table Offset - Pointer to GCB address table }
|
||||
smDisableInc = $24; {Jump Table Offset - Disable Increment routine }
|
||||
|
||||
TYPE
|
||||
SoundPBHndl = ^SoundPBPtr;
|
||||
SoundPBPtr = ^SoundParamBlock;
|
||||
SoundParamBlock = RECORD
|
||||
waveStart : Ptr; { starting address of wave }
|
||||
waveSize : Integer; { waveform size in pages }
|
||||
freqOffset : Integer; { ? formula to be provided }
|
||||
docBuffer : Integer; { DOC buffer start address, low byte = 0 }
|
||||
bufferSize : Integer; { DOC buffer start address, low byte = 0 }
|
||||
nextWavePtr : SoundPBPtr; { Pointer to start of next wave's parameter block
|
||||
}
|
||||
volSetting : Integer; { DOC volume setting. High byte = 0 }
|
||||
END;
|
||||
DocRegParamBlkPtr = ^DocRegParamBlk;
|
||||
DocRegParamBlk = PACKED RECORD
|
||||
oscGenType : Integer;
|
||||
freqLow1 : Byte;
|
||||
freqHigh1 : Byte;
|
||||
vol1 : Byte;
|
||||
tablePtr1 : Byte;
|
||||
control1 : Byte;
|
||||
tableSize1 : Byte;
|
||||
freqLow2 : Byte;
|
||||
freqHigh2 : Byte;
|
||||
vol2 : Byte;
|
||||
tablePtr2 : Byte;
|
||||
control2 : Byte;
|
||||
tableSize2 : Byte;
|
||||
END;
|
||||
PROCEDURE SoundBootInit ; Tool $08,$01;
|
||||
PROCEDURE SoundStartUp ( dPageAddr:Integer) ; Tool $08,$02;
|
||||
PROCEDURE SoundShutDown ; Tool $08,$03;
|
||||
FUNCTION SoundVersion : Integer ; Tool $08,$04;
|
||||
PROCEDURE SoundReset ; Tool $08,$05;
|
||||
FUNCTION SoundToolStatus : Boolean ; Tool $08,$06;
|
||||
FUNCTION FFGeneratorStatus ( genNumber:Integer) : Integer ; Tool $08,$11;
|
||||
FUNCTION FFSoundDoneStatus ( genNumber:Integer) : Boolean ; Tool $08,$14;
|
||||
FUNCTION FFSoundStatus : Integer ; Tool $08,$10;
|
||||
PROCEDURE FFStartSound ( genNumFFSynth:Integer; pBlockPtr:SoundPBPtr) ; Tool
|
||||
$08,$0E;
|
||||
PROCEDURE FFStopSound ( genMask:Integer) ; Tool $08,$0F;
|
||||
FUNCTION GetSoundVolume ( genNumber:Integer) : Integer ; Tool $08,$0C;
|
||||
FUNCTION GetTableAddress : Ptr ; Tool $08,$0B;
|
||||
PROCEDURE ReadRamBlock ( destPtr:Ptr; docStart:Integer; byteCount:Integer) ;
|
||||
Tool $08,$0A;
|
||||
PROCEDURE SetSoundMIRQV ( sMasterIRQ:Longint) ; Tool $08,$12;
|
||||
PROCEDURE SetSoundVolume ( volume:Integer; genNumber:Integer) ; Tool $08,$0D;
|
||||
FUNCTION SetUserSoundIRQV ( userIRQVector:Longint) : Ptr ; Tool $08,$13;
|
||||
PROCEDURE WriteRamBlock ( srcPtr:Ptr; docStart:Integer; byteCount:Integer) ;
|
||||
Tool $08,$09;
|
||||
PROCEDURE FFSetUpSound ( channelGen:Integer; paramBlockPtr:SoundPBPtr) ; Tool
|
||||
$08,$15;
|
||||
PROCEDURE FFStartPlaying ( genWord:Integer) ; Tool $08,$16;
|
||||
PROCEDURE SetDOCReg ( pBlockPtr:DocRegParamBlk) ; Tool $08,$17;
|
||||
PROCEDURE ReadDOCReg (VAR pBlockPtr:DocRegParamBlk) ; Tool $08,$18;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,154 @@
|
|||
{********************************************
|
||||
; File: StdFile.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT STDFILE;
|
||||
INTERFACE
|
||||
USES Types, QuickDraw, Events, Controls, Windows, LineEdit, Dialogs;
|
||||
CONST
|
||||
|
||||
noDisplay = $0000; {filterProc result - file not to be displayed }
|
||||
noSelect = $0001; {filterProc result - file displayed, but not selectable }
|
||||
displaySelect = $0002; {filterProc result - file displayed and selectable }
|
||||
sfMatchFileType = $8000; { - }
|
||||
sfMatchAuxType = $4000; { - }
|
||||
sfDisplayGrey = $2000; { - }
|
||||
|
||||
TYPE
|
||||
SFReplyRecPtr = ^SFReplyRec;
|
||||
SFReplyRec = RECORD
|
||||
good : Boolean;
|
||||
fileType : Integer;
|
||||
auxFileType : Integer;
|
||||
filename : String[15];
|
||||
fullPathname : String[128];
|
||||
END;
|
||||
SFReplyRec2Hndl = ^SFReplyRec2Ptr;
|
||||
SFReplyRec2Ptr = ^SFReplyRec2;
|
||||
SFReplyRec2 = RECORD
|
||||
good : Boolean;
|
||||
filetype : Integer;
|
||||
auxType : Longint;
|
||||
nameDesc : RefDescriptor;
|
||||
nameRef : Ref;
|
||||
pathDesc : RefDescriptor;
|
||||
pathRef : Ref;
|
||||
END;
|
||||
multiReplyRecord = RECORD
|
||||
good : Integer;
|
||||
namesHandle : Handle;
|
||||
END;
|
||||
SFTypeListHandle = ^SFTypeListPtr;
|
||||
SFTypeListPtr = ^SFTypeList;
|
||||
SFTypeList = PACKED RECORD
|
||||
numEntries : Byte;
|
||||
fileTypeEntries : PACKED ARRAY[1..5] OF Byte;
|
||||
END;
|
||||
TypeSelector2 = RECORD
|
||||
flags : Integer;
|
||||
fileType : Integer;
|
||||
auxType : Longint;
|
||||
END;
|
||||
SFTypeList2Ptr = ^SFTypeList2;
|
||||
SFTypeList2 = RECORD
|
||||
numEntries : Integer;
|
||||
fileTypeEntries : ARRAY[1..5] OF TypeSelector2;
|
||||
END;
|
||||
PROCEDURE SFBootInit ; Tool $17,$01;
|
||||
PROCEDURE SFStartUp ( userID:Integer; dPageAddr:Integer) ; Tool $17,$02;
|
||||
PROCEDURE SFShutDown ; Tool $17,$03;
|
||||
FUNCTION SFVersion : Integer ; Tool $17,$04;
|
||||
PROCEDURE SFReset ; Tool $17,$05;
|
||||
FUNCTION SFStatus : Boolean ; Tool $17,$06;
|
||||
PROCEDURE SFAllCaps ( allCapsFlag:Boolean) ; Tool $17,$0D;
|
||||
PROCEDURE SFGetFile
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE SFGetFile2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE SFMultiGet2 ( whereX:Integer;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE SFPGetFile ( whereX:Integer;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE SFPGetFile2 ( whereX:Integer;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE SFPMultiGet2 ( whereX:Integer;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE SFPPutFile ( whereX:Integer;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE SFPPutFile2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE SFPutFile ( whereX:Integer;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE SFPutFile2 ( whereX:Integer;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
FUNCTION SFShowInvisible ( invisibleState:Boolean) : Boolean ; Tool $17,$12;
|
||||
PROCEDURE SFReScan ( filterProcPtr:ProcPtr; typeListPtr:SFTypeList2Ptr) ; Tool
|
||||
$17,$13;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,343 @@
|
|||
{********************************************
|
||||
; File: TextEdit.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT TEXTEDIT;
|
||||
INTERFACE
|
||||
USES TYPES,MEMORY,QUICKDRAW,EVENTS,CONTROLS,FONTS,GSOS,RESOURCES;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
teAlreadyStarted = $2201; {error - }
|
||||
teNotStarted = $2202; {error - }
|
||||
teInvalidHandle = $2203; {error - }
|
||||
teInvalidVerb = $2204; {error - }
|
||||
teInvalidFlag = $2205; {error - }
|
||||
teInvalidPCount = $2206; {error - }
|
||||
teInvalidRect = $2207; {error - }
|
||||
teBufferOverflow = $2208; {error - }
|
||||
teInvalidLine = $2209; { - }
|
||||
teInvalidCall = $220A; { - }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
NullVerb = $0; {TE - }
|
||||
PStringVerb = $0001; {TE - }
|
||||
CStringVerb = $0002; {TE - }
|
||||
C1InputVerb = $0003; {TE - }
|
||||
C1OutputVerb = $0004; {TE - }
|
||||
HandleVerb = $0005; {TE - }
|
||||
PointerVerb = $0006; {TE - }
|
||||
NewPStringVerb = $0007; {TE - }
|
||||
fEqualLineSpacing = $8000; {TE - }
|
||||
fShowInvisibles = $4000; {TE - }
|
||||
teInvalidDescriptor = $2204; { - }
|
||||
teInvalidParameter = $220B; { - }
|
||||
teInvalidTextBox2 = $220C; { - }
|
||||
teEqualLineSpacing = $8000; { - }
|
||||
teShowInvisibles = $4000; { - }
|
||||
teJustLeft = $0; { - }
|
||||
teJustRight = $1; { - }
|
||||
teJustCenter = $2; { - }
|
||||
teJustFull = $3; { - }
|
||||
teNoTabs = $0; { - }
|
||||
teColumnTabs = $1; { - }
|
||||
teAbsoluteTabs = $2; { - }
|
||||
teLeftTab = $0; { - }
|
||||
teCenterTab = $1; { - }
|
||||
teRightTab = $2; { - }
|
||||
teDecimalTab = $3; { - }
|
||||
teInvis = $4000; { - }
|
||||
teCtlColorIsPtr = $0000; { - }
|
||||
teCtlColorIsHandle = $0004; { - }
|
||||
teCtlColorIsResource = $0008; { - }
|
||||
teCtlStyleIsPtr = $0000; { - }
|
||||
teCtlStyleIsHandle = $0001; { - }
|
||||
teCtlStyleIsResource = $0002; { - }
|
||||
teNotControl = $80000000; { - }
|
||||
teSingleFormat = $40000000; { - }
|
||||
teSingleStyle = $20000000; { - }
|
||||
teNoWordWrap = $10000000; { - }
|
||||
teNoScroll = $08000000; { - }
|
||||
teReadOnly = $04000000; { - }
|
||||
teSmartCutPaste = $02000000; { - }
|
||||
teTabSwitch = $01000000; { - }
|
||||
teDrawBounds = $00800000; { - }
|
||||
teColorHilite = $00400000; { - }
|
||||
teRefIsPtr = $0000; { - }
|
||||
teRefIsHandle = $0001; { - }
|
||||
teRefIsResource = $0002; { - }
|
||||
teRefIsNewHandle = $0003; { - }
|
||||
teDataIsPString = $0000; { - }
|
||||
teDataIsCString = $0001; { - }
|
||||
teDataIsC1Input = $0002; { - }
|
||||
teDataIsC1Output = $0003; { - }
|
||||
teDataIsTextBox2 = $0004; { - }
|
||||
teDataIsTextBlock = $0005; { - }
|
||||
teTextIsPtr = $0000; { - }
|
||||
teTextIsHandle = $0008; { - }
|
||||
teTextIsResource = $0010; { - }
|
||||
teTextIsNewHandle = $0018; { - }
|
||||
tePartialLines = $8000; { - }
|
||||
teDontDraw = $4000; { - }
|
||||
teUseFont = $0020; { - }
|
||||
teUseSize = $0010; { - }
|
||||
teUseForeColor = $0008; { - }
|
||||
teUseBackColor = $0004; { - }
|
||||
teUseUserData = $0002; { - }
|
||||
teUseAttributes = $0001; { - }
|
||||
teReplaceFont = $0040; { - }
|
||||
teReplaceSize = $0020; { - }
|
||||
teReplaceForeColor = $0010; { - }
|
||||
teReplaceBackColor = $0008; { - }
|
||||
teReplaceUserField = $0004; { - }
|
||||
teReplaceAttributes = $0002; { - }
|
||||
teSwitchAttributes = $0001; { - }
|
||||
teEraseRect = $0001; { - }
|
||||
teEraseBuffer = $0002; { - }
|
||||
teRectChanged = $0003; { - }
|
||||
doEraseRect = $0001; { - }
|
||||
doEraseBuffer = $0002; { - }
|
||||
doRectChanged = $0003; { - }
|
||||
doKeyStroke = $0004; { - }
|
||||
|
||||
TYPE
|
||||
TEColorTablePtr = ^TEColorTable;
|
||||
TEColorTable = RECORD
|
||||
contentColor : Integer;
|
||||
outlineColor : Integer;
|
||||
pageBoundaryColor : Integer;
|
||||
hiliteForeColor : Integer;
|
||||
hiliteBackColor : Integer;
|
||||
vertColorDescriptor : Integer;
|
||||
vertColorRef : Longint;
|
||||
horzColorDescriptor : Integer;
|
||||
horzColorRef : Longint;
|
||||
growColorDescriptor : Integer;
|
||||
growColorRef : Longint;
|
||||
END;
|
||||
TEBlockEntry = RECORD
|
||||
text : Handle;
|
||||
length : Handle;
|
||||
flags : Integer;
|
||||
END;
|
||||
TEBlocksHndl = ^TEBlocksPtr;
|
||||
TEBlocksPtr = ^TEBlocksRecord;
|
||||
TEBlocksRecord = RECORD
|
||||
start : Longint;
|
||||
index : Integer;
|
||||
blocks : ARRAY[1..1] OF TEBlockEntry;
|
||||
END;
|
||||
TEHandle = ^TERecordPtr;
|
||||
TERecordPtr = ^TERecord;
|
||||
TERecord = PACKED RECORD
|
||||
ctlNext : CtlRecHndl;
|
||||
ctlOwner : WindowPtr;
|
||||
ctlRect : Rect;
|
||||
ctlFlag : Byte;
|
||||
ctlHilite : Byte;
|
||||
ctlValue : Integer;
|
||||
ctlProc : ProcPtr;
|
||||
ctlAction : ProcPtr;
|
||||
ctlData : Longint;
|
||||
ctlRefCon : Longint;
|
||||
ctlColorRef : TEColorTablePtr;
|
||||
|
||||
ctlID : Longint;
|
||||
ctlMoreFlags : Integer;
|
||||
ctlVersion : Integer;
|
||||
theChar : Integer;
|
||||
theModifiers : Integer;
|
||||
extendFlag : Integer;
|
||||
moveByWord : Integer;
|
||||
inputPtr : Ptr;
|
||||
inputLength : Longint;
|
||||
theRect : Rect;
|
||||
END;
|
||||
TETabItem = RECORD
|
||||
tabKind : Integer;
|
||||
tabData : Integer;
|
||||
END;
|
||||
TERuler = RECORD
|
||||
leftMargin : Integer;
|
||||
leftIndent : Integer;
|
||||
rightMargin : Integer;
|
||||
just : Integer;
|
||||
extraLS : Integer;
|
||||
flags : Integer;
|
||||
userData : Integer;
|
||||
tabType : Integer;
|
||||
tabs : ARRAY[1..1] OF TETabItem;
|
||||
tabTerminator : Integer;
|
||||
END;
|
||||
TEStyle = RECORD
|
||||
teFont : FontID;
|
||||
foreColor : Integer;
|
||||
backColor : Integer;
|
||||
reserved : Longint;
|
||||
END;
|
||||
TEStyleGroupHndl = ^TEStyleGroupPtr;
|
||||
TEStyleGroupPtr = ^TEStyleGroup;
|
||||
TEStyleGroup = RECORD
|
||||
count : Integer;
|
||||
styles : ARRAY[1..1] OF TEStyle;
|
||||
END;
|
||||
TEStyleItem = RECORD
|
||||
length : Longint;
|
||||
offset : Longint;
|
||||
END;
|
||||
TEFormatHndl = ^TEFormatPtr;
|
||||
TEFormatPtr = ^TEFormat;
|
||||
TEFormat = RECORD
|
||||
version : Integer;
|
||||
rulerListLength : Longint;
|
||||
theRulerList : ARRAY[1..1] OF TERuler;
|
||||
styleListLength : Longint;
|
||||
theStyleList : ARRAY[1..1] OF TEStyle;
|
||||
numberOfStyles : Longint;
|
||||
theStyles : ARRAY[1..1] OF TEStyleItem;
|
||||
END;
|
||||
TETextRef = RECORD CASE INTEGER OF
|
||||
$0000:(textIsPStringPtr:StringPtr);
|
||||
$0001:(textIsCStringPtr:CStringPtr);
|
||||
$0002:(textIsC1InputPtr:GSString255Ptr);
|
||||
$0003:(textIsC1OutputPtr:ResultBuf255Ptr);
|
||||
$0004:(textIsTB2Ptr:Ptr);
|
||||
$0005:(textIsRawPtr:Ptr);
|
||||
|
||||
$0008:(textIsPStringHandle:String255Hndl);
|
||||
$0009:(textIsCStringHandle:CStringHndl);
|
||||
$000A:(textIsC1InputHandle:GSString255Hndl);
|
||||
$000B:(textIsC1OutputHandle:ResultBuf255Hndl);
|
||||
$000C:(textIsTB2Handle:Handle);
|
||||
$000D:(textIsRawHandle:Handle);
|
||||
|
||||
$0010:(textIsPStringResource: ResID);
|
||||
$0011:(textIsCStringResource: ResID);
|
||||
$0012:(textIsC1InputResource: ResID);
|
||||
$0013:(textIsC1OutputResource: ResID);
|
||||
$0014:(textIsTB2Resource: ResID);
|
||||
$0015:(textIsRawResource: ResID);
|
||||
|
||||
$0018:(textIsPStringNewH:String255HndlPtr);
|
||||
$0019:(textIsCStringNewH:CStringHndlPtr);
|
||||
$001A:(textIsC1InputNewH:GSString255HndlPtr);
|
||||
$001B:(textIsC1OutputNewH:ResultBuf255HndlPtr);
|
||||
$001C:(textIsTB2NewH:HandlePtr);
|
||||
$001D:(textIsRawNewH:HandlePtr);
|
||||
END;
|
||||
|
||||
TEStyleRef = RECORD CASE INTEGER OF
|
||||
$0000:(styleIsPtr:TEFormatPtr);
|
||||
$0001:(styleIsHandle:TEFormatHndl);
|
||||
$0002:(styleIsResource:ResID);
|
||||
$0003:(styleIsNewH:^TEFormatHndl);
|
||||
END;
|
||||
|
||||
TEParamBlockHndl = ^TEParamBlockPtr;
|
||||
TEParamBlockPtr = ^TEParamBlock;
|
||||
TEParamBlock = RECORD
|
||||
pCount : Integer;
|
||||
controlID : Longint;
|
||||
boundsRect : Rect;
|
||||
procRef : Longint;
|
||||
flags : Integer;
|
||||
moreflags : Integer;
|
||||
refCon : Longint;
|
||||
textFlags : Longint;
|
||||
indentRect : Rect;
|
||||
vertBar : CtlRecHndl;
|
||||
vertScroll : Integer;
|
||||
horzBar : CtlRecHndl;
|
||||
horzScroll : Integer;
|
||||
styleRef : TEStyleRef;
|
||||
textDescriptor : Integer;
|
||||
textRef : TETextRef;
|
||||
textLength : Longint;
|
||||
maxChars : Longint;
|
||||
maxLines : Longint;
|
||||
maxHeight : Integer;
|
||||
pageHeight : Integer;
|
||||
headerHeight : Integer;
|
||||
footerHeight : Integer;
|
||||
pageBoundary : Integer;
|
||||
colorRef : Longint;
|
||||
drawMode : Integer;
|
||||
filterProcPtr : ProcPtr;
|
||||
END;
|
||||
TEInfoRec = RECORD
|
||||
charCount : Longint;
|
||||
lineCount : Longint;
|
||||
formatMemory : Longint;
|
||||
totalMemory : Longint;
|
||||
styleCount : Longint;
|
||||
rulerCount : Longint;
|
||||
END;
|
||||
TEHooks = RECORD
|
||||
charFilter : ProcPtr;
|
||||
wordWrap : ProcPtr;
|
||||
wordBreak : ProcPtr;
|
||||
drawText : ProcPtr;
|
||||
eraseText : ProcPtr;
|
||||
END;
|
||||
PROCEDURE TEBootInit ; Tool $22,$01;
|
||||
PROCEDURE TEStartup ( userId:Integer; directPage:Integer) ; Tool $22,$02;
|
||||
PROCEDURE TEShutdown ; Tool $22,$03;
|
||||
FUNCTION TEVersion : Integer ; Tool $22,$04;
|
||||
PROCEDURE TEReset ; Tool $22,$05;
|
||||
FUNCTION TEStatus : Integer ; Tool $22,$06;
|
||||
PROCEDURE TEActivate ( teH:TEHandle) ; Tool $22,$0F;
|
||||
PROCEDURE TEClear ( teH:TEHandle) ; Tool $22,$19;
|
||||
PROCEDURE TEClick (VAR theEventPtr:EventRecord; teH:TEHandle) ; Tool $22,$11;
|
||||
PROCEDURE TECut ( teH:TEHandle) ; Tool $22,$16;
|
||||
PROCEDURE TECopy ( teH:TEHandle) ; Tool $22,$17;
|
||||
PROCEDURE TEDeactivate ( teH:TEHandle) ; Tool $22,$10;
|
||||
FUNCTION TEGetDefProc : ProcPtr ; Tool $22,$22;
|
||||
PROCEDURE TEGetHooks (VAR hooks:TEHooks; count:Integer; teH:TEHandle) ; Tool
|
||||
$22,$20;
|
||||
PROCEDURE TEGetSelection (VAR selStart:Longint;VAR selEnd:Longint;
|
||||
teH:TEHandle) ; Tool $22,$1C;
|
||||
FUNCTION TEGetSelectionStyle (VAR commonStyle:TEStyle;
|
||||
styleHandle:TEStyleGroupHndl; teH:TEHandle) : Integer ; Tool $22,$1E;
|
||||
FUNCTION TEGetText ( bufferDesc:Integer; bufferRef:TETextRef;
|
||||
bufferLength:Longint; styleDesc:Integer; styleRef:TEStyleRef; teH:TEHandle) :
|
||||
Longint ; Tool $22,$0C;
|
||||
PROCEDURE TEGetTextInfo (VAR infoRec:TEInfoRec; pCount:Integer; teH:TEHandle)
|
||||
; Tool $22,$0D;
|
||||
PROCEDURE TEIdle ( teH:TEHandle) ; Tool $22,$0E;
|
||||
PROCEDURE TEInsert ( textDesc:Integer; textRef:TETextRef; textLength:Longint;
|
||||
styleDesc:Integer; styleRef:TEStyleRef; teH:TEHandle) ; Tool $22,$1A;
|
||||
PROCEDURE TEInsertPageBreak ( teH:TEHandle) ; Tool $22,$15;
|
||||
PROCEDURE TEKey ( theEventPtr:EventRecord; teH:TEHandle) ; Tool $22,$14;
|
||||
PROCEDURE TEKill ( teH:TEHandle) ; Tool $22,$0A;
|
||||
FUNCTION TENew ( theParms:TEParamBlock) : TEHandle ; Tool $22,$09;
|
||||
FUNCTION TEPaintText ( thePort:GrafPortPtr; start:Longint; destRect:rect;
|
||||
paintFlags:Integer; teH:TEHandle) : Longint ; Tool $22,$13;
|
||||
PROCEDURE TEPaste ( teH:TEHandle) ; Tool $22,$18;
|
||||
PROCEDURE TEReplace ( textDesc:Integer; textRef:TETextRef; textLength:Longint;
|
||||
styleDesc:Integer; styleRef:TEStyleRef; teH:TEHandle) ; Tool $22,$1B;
|
||||
PROCEDURE TESetHooks ( hooks:TEHooks; count:Integer; teH:TEHandle) ; Tool
|
||||
$22,$21;
|
||||
PROCEDURE TESetSelection ( selStart:Longint; selEnd:Longint; teH:TEHandle) ;
|
||||
Tool $22,$1D;
|
||||
PROCEDURE TESetText ( textDesc:Integer; textRef:TETextRef; textLength:Longint;
|
||||
styleDesc:Integer; styleRef:TEStyleRef; teH:TEHandle) ; Tool $22,$0B;
|
||||
PROCEDURE TEStyleChange ( flags:Integer; newStyle:TEStyle; teH:TEHandle) ;
|
||||
Tool $22,$1F;
|
||||
PROCEDURE TEUpdate ( teH:TEHandle) ; Tool $22,$12;
|
||||
PROCEDURE TEGetRuler ( rulerDescriptor:Integer; rulerRef:Ref; teH:TEHandle) ;
|
||||
Tool $22,$23;
|
||||
PROCEDURE TEOffsetToPoint ( textOffset:Longint; vertPosPtr:Ptr; horzPosPtr:Ptr;
|
||||
teH:TEHandle) ; Tool $22,$20;
|
||||
FUNCTION TEPointToOffset ( vertPosPtr:Ptr; horzPosPtr:Ptr; teH:TEHandle) :
|
||||
Longint ; Tool $22,$21;
|
||||
FUNCTION TEScroll ( scrollDescriptor:Integer; vertAmount:Longint;
|
||||
horzAmount:Longint; teH:TEHandle) : Longint ; Tool $22,$25;
|
||||
PROCEDURE TESetRuler ( rulerDescriptor:Integer; rulerRef:Ref; teH:TEHandle);
|
||||
Tool $22,$24;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,104 @@
|
|||
{********************************************
|
||||
; File: Types.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT TYPES;
|
||||
INTERFACE
|
||||
|
||||
CONST
|
||||
noError = $0000;
|
||||
|
||||
refIsPointer = $0000; {RefDescriptor - }
|
||||
refIsHandle = $0001; {RefDescriptor - }
|
||||
refIsResource = $0002; {RefDescriptor - }
|
||||
refIsNewHandle = $0003; {RefDescriptor - }
|
||||
|
||||
TYPE
|
||||
Byte = 0..255;
|
||||
Fixed = Longint ;
|
||||
Frac = Longint ;
|
||||
ExtendedPtr = ^Extended;
|
||||
|
||||
SignedByte = -128..127;
|
||||
PackedByte = PACKED ARRAY [1..1] of SignedByte;
|
||||
Ptr = ^PackedByte;
|
||||
PointerPtr = ^Ptr;
|
||||
Handle = ^Ptr;
|
||||
|
||||
HandlePtr = ^Handle;
|
||||
|
||||
CStringPtr = Ptr;
|
||||
CStringHndl = ^CStringPtr;
|
||||
CStringHndlPtr = ^CStringHndl;
|
||||
ProcPtr = Ptr;
|
||||
VoidProcPtr = ProcPtr;
|
||||
WordProcPtr = ProcPtr;
|
||||
LongProcPtr = ProcPtr;
|
||||
|
||||
IntPtr = ^Integer;
|
||||
FPTPtr = Ptr ;
|
||||
String255 = STRING[255];
|
||||
String255Ptr = ^String255;
|
||||
String255Hndl = ^String255Ptr;
|
||||
String255HndlPtr = ^String255Hndl;
|
||||
Str255 = String255;
|
||||
StringPtr = String255Ptr;
|
||||
StringHandle = ^StringPtr;
|
||||
String32 = STRING[32];
|
||||
String32Ptr = ^String32;
|
||||
String32Handle = ^String32Ptr;
|
||||
Str32 = String32;
|
||||
|
||||
PointPtr = ^Point;
|
||||
Point = RECORD
|
||||
v : Integer;
|
||||
h : Integer;
|
||||
END;
|
||||
RectHndl = ^RectPtr;
|
||||
RectPtr = ^Rect;
|
||||
Rect = RECORD
|
||||
CASE INTEGER OF
|
||||
1:
|
||||
(top: Integer;
|
||||
left: Integer;
|
||||
bottom: Integer;
|
||||
right: Integer);
|
||||
2:
|
||||
(topLeft: Point;
|
||||
botRight: Point);
|
||||
3: (
|
||||
v1 : Integer;
|
||||
h1 : Integer;
|
||||
v2 : Integer;
|
||||
h2 : Integer);
|
||||
END;
|
||||
|
||||
TimeRecHndl = ^TimeRecPtr;
|
||||
TimeRecPtr = ^TimeRec;
|
||||
TimeRec = PACKED RECORD
|
||||
second : Byte;
|
||||
minute : Byte;
|
||||
hour : Byte;
|
||||
year : Byte;
|
||||
day : Byte;
|
||||
month : Byte;
|
||||
extra : Byte;
|
||||
weekDay : Byte;
|
||||
END;
|
||||
|
||||
RefDescriptor = Integer;
|
||||
Ref = RECORD
|
||||
CASE Integer OF
|
||||
refIsPointer : ( refIsPointer : Ptr ) ;
|
||||
refIsHandle : ( refIsHandle : Handle ) ;
|
||||
refIsResource : ( refIsResource : Longint ) ;
|
||||
refIsNewHandle : ( refIsNewHandle : Handle ) ;
|
||||
END;
|
||||
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,119 @@
|
|||
{********************************************
|
||||
; File: Video.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT VIDEO;
|
||||
INTERFACE
|
||||
USES TYPES;
|
||||
CONST
|
||||
|
||||
vdVideoOverlay = $01; { - }
|
||||
vdFrameGrabber = $02; { - }
|
||||
vdInVStandards = $03; { - }
|
||||
vdOutVStandards = $04; { - }
|
||||
vdKeyDissLevels = $05; { - }
|
||||
vdNKeyDissLevels = $06; { - }
|
||||
vdAdjSideEffect = $07; { - }
|
||||
vdKeyColorBits = $08; { - }
|
||||
vdInHueAdj = $09; { - }
|
||||
vdInSatAdj = $0A; { - }
|
||||
vdInContrastAdj = $0B; { - }
|
||||
vdInBrightAdj = $0C; { - }
|
||||
vdOutSetup = $0D; { - }
|
||||
vdOutChromaFilter = $0E; { - }
|
||||
vdOutExtBlank = $0F; { - }
|
||||
vdKeyEnhDiss = $10; { - }
|
||||
vdLineInterrupt = $11; { - }
|
||||
vdGGBus = $12; { - }
|
||||
vdDualOut = $13; { - }
|
||||
vdTextMonoOver = $14; { - }
|
||||
vdGenlock = $32; { - }
|
||||
vdVideoDetect = $33; { - }
|
||||
vdGenlocked = $34; { - }
|
||||
vdAdjInc = $50; { - }
|
||||
vdAdjDec = $51; { - }
|
||||
vdAdjSave = $52; { - }
|
||||
vdAvail = $01; { - }
|
||||
vdNotAvail = $00; { - }
|
||||
vdYes = $01; { - }
|
||||
vdNo = $00; { - }
|
||||
vdOn = $01; { - }
|
||||
vdOff = $00; { - }
|
||||
vdKColorEnable = $64; { - }
|
||||
vdVerticalBlank = $82; { - }
|
||||
vdMainPageLin = $C8; { - }
|
||||
vdRAMPageSel = $C9; { - }
|
||||
vdVBLInterrupt = $CA; { - }
|
||||
vdInterlaceMode = $CB; { - }
|
||||
vdClearVBLInt = $CC; { - }
|
||||
vdClearLineInt = $CD; { - }
|
||||
vdDisplayField = $CE; { - }
|
||||
vdVBLIntRequest = $CF; { - }
|
||||
vdLineIntRequest = $D0; { - }
|
||||
vdNone = $00; { - }
|
||||
vdNTSC = $01; { - }
|
||||
vdPAL = $02; { - }
|
||||
vdSECAM = $04; { - }
|
||||
vdSNTSC = $08; { - }
|
||||
vdSPAL = $10; { - }
|
||||
vdSSECAM = $20; { - }
|
||||
vdRGB60 = $40; { - }
|
||||
vdRGB50 = $80; { - }
|
||||
vdAux = $00; { - }
|
||||
vdMain = $10; { - }
|
||||
vdInterlace = $30; { - }
|
||||
vdField1 = $01; { - }
|
||||
vdField0 = $00; { - }
|
||||
vdEnable = $01; { - }
|
||||
vdDisable = $00; { - }
|
||||
vdExternal = $00; { - }
|
||||
vdGraphics = $01; { - }
|
||||
vdVBlank = $01; { - }
|
||||
vdActiveVideo = $00; { - }
|
||||
vdNoVideoDevice = $2110; {Error - no video device was found }
|
||||
vdAlreadyStarted = $2111; {Error - Video tool set already started }
|
||||
vdInvalidSelector = $2112; {Error - an invalid selector was specified }
|
||||
vdInvalidParam = $2113; {Error - an invalid parameter was specified }
|
||||
vdUnImplemented = $21FF; {Error - an unimplemented tool set routine was called
|
||||
}
|
||||
PROCEDURE VDBootInit ; Tool $21,$01;
|
||||
PROCEDURE VDStartUp ; Tool $21,$02;
|
||||
PROCEDURE VDShutdown ; Tool $21,$03;
|
||||
FUNCTION VDVersion : Integer ; Tool $21,$04;
|
||||
PROCEDURE VDReset ; Tool $21,$05;
|
||||
FUNCTION VDStatus : Boolean ; Tool $21,$06;
|
||||
FUNCTION VDGetFeatures ( videoSelector:Integer) : Integer ; Tool $21,$1B;
|
||||
PROCEDURE VDInControl ( videoSelector:Integer; inputCtlValue:Integer) ; Tool
|
||||
$21,$1C;
|
||||
FUNCTION VDInStatus ( videoSelector:Integer) : Integer ; Tool $21,$09;
|
||||
PROCEDURE VDInSetStd ( inputStandard:Integer) ; Tool $21,$0A;
|
||||
FUNCTION VDInGetStd : Integer ; Tool $21,$0B;
|
||||
PROCEDURE VDInConvAdj ( videoSelector:Integer; adjustFunction:Integer) ; Tool
|
||||
$21,$0C;
|
||||
PROCEDURE VDKeyControl ( videoSelector:Integer; keyerCtlValue:Integer) ; Tool
|
||||
$21,$0D;
|
||||
FUNCTION VDKeyStatus ( videoSelector:Integer) : Integer ; Tool $21,$0E;
|
||||
PROCEDURE VDKeySetKCol ( redValue:Integer; greenValue:Integer;
|
||||
blueValue:Integer) ; Tool $21,$0F;
|
||||
FUNCTION VDKeyGetRCol : Integer ; Tool $21,$10;
|
||||
FUNCTION VDKeyGetGCol : Integer ; Tool $21,$11;
|
||||
FUNCTION VDKeyGetBCol : Integer ; Tool $21,$12;
|
||||
PROCEDURE VDKeySetKDiss ( kDissolve:Integer) ; Tool $21,$13;
|
||||
FUNCTION VDKeyGetKDiss : Integer ; Tool $21,$14;
|
||||
PROCEDURE VDKeySetNKDiss ( nonKeyDissolve:Integer) ; Tool $21,$15;
|
||||
FUNCTION VDKeyGetNKDiss : Integer ; Tool $21,$16;
|
||||
PROCEDURE VDOutSetStd ( outStandard:Integer) ; Tool $21,$17;
|
||||
FUNCTION VDOutGetStd : Integer ; Tool $21,$18;
|
||||
PROCEDURE VDOutControl ( videoSelector:Integer; outCtlValue:Integer) ; Tool
|
||||
$21,$19;
|
||||
FUNCTION VDOutStatus ( videoSelector:Integer) : Integer ; Tool $21,$1A;
|
||||
PROCEDURE VDGGControl ( videoSelector:Integer; gGCtlValue:Integer) ; Tool
|
||||
$21,$1D;
|
||||
FUNCTION VDGGStatus ( videoSelector:Integer) : Integer ; Tool $21,$1E;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,301 @@
|
|||
{********************************************
|
||||
; File: Windows.p
|
||||
;
|
||||
;
|
||||
; Copyright Apple Computer, Inc. 1986-89
|
||||
; All Rights Reserved
|
||||
;
|
||||
********************************************}
|
||||
|
||||
UNIT WINDOWS;
|
||||
INTERFACE
|
||||
USES TYPES,QUICKDRAW,EVENTS,CONTROLS;
|
||||
CONST
|
||||
|
||||
(* *** Toolset Errors ***
|
||||
paramLenErr = $0E01; {error - first word of parameter list is the wrong size }
|
||||
allocateErr = $0E02; {error - unable to allocate window record }
|
||||
taskMaskErr = $0E03; {error - bits 12-15 are not clear in WmTaskMask field of
|
||||
EventRecord }
|
||||
*** Toolset Errors *** *)
|
||||
|
||||
wNoConstraint = $0000; {Axis parameter - No constraint on movement. }
|
||||
wHAxisOnly = $0001; {Axis parameter - Horizontal axis only. }
|
||||
wVAxisOnly = $0002; {Axis parameter - Vertical axis only. }
|
||||
FromDesk = $00; {Desktop Command - Subtract region from desktop }
|
||||
ToDesk = $1; {Desktop Command - Add region to desktop }
|
||||
GetDesktop = $2; {Desktop Command - Get Handle of Desktop region }
|
||||
SetDesktop = $3; {Desktop Command - Set Handle of Desktop region }
|
||||
GetDeskPat = $4; {Desktop command - Address of pattern or drawing routine }
|
||||
SetDeskPat = $5; {Desktop command - Change Address of pattern or drawing
|
||||
routine }
|
||||
GetVisDesktop = $6; {Desktop command - Get destop region less visible windows.
|
||||
}
|
||||
BackGroundRgn = $7; {Desktop command - For drawing directly on desktop. }
|
||||
toBottom = $FFFFFFFE; {SendBehind value - To send window to bottom. }
|
||||
topMost = $FFFFFFFF; {SendBehind value - To make window top. }
|
||||
bottomMost = $0000; {SendBehind value - To make window bottom. }
|
||||
tmMenuKey = $0001; {Task Mask - }
|
||||
tmUpdate = $0002; {Task Mask - }
|
||||
tmFindW = $0004; {Task Mask - }
|
||||
tmMenuSel = $0008; {Task Mask - }
|
||||
tmOpenNDA = $0010; {Task Mask - }
|
||||
tmSysClick = $0020; {Task Mask - }
|
||||
tmDragW = $0040; {Task Mask - }
|
||||
tmContent = $0080; {Task Mask - }
|
||||
tmClose = $0100; {Task Mask - }
|
||||
tmZoom = $0200; {Task Mask - }
|
||||
tmGrow = $0400; {Task Mask - }
|
||||
tmScroll = $0800; {Task Mask - }
|
||||
tmSpecial = $1000; {Task Mask - }
|
||||
tmCRedraw = $2000; {Task Mask - }
|
||||
tmInactive = $4000; {Task Mask - }
|
||||
tmInfo = $8000; {Task Mask - }
|
||||
wNoHit = $0000; {TaskMaster codes - retained for back compatibility. }
|
||||
inNull = $0000; {TaskMaster codes - retained for back compatibility }
|
||||
inKey = $0003; {TaskMaster codes - retained for back compatibility }
|
||||
inButtDwn = $0001; {TaskMaster codes - retained for back compatibility }
|
||||
inUpdate = $0006; {TaskMaster codes - retained for back compatibility }
|
||||
wInDesk = $0010; {TaskMaster codes - On Desktop }
|
||||
wInMenuBar = $0011; {TaskMaster codes - On system menu bar }
|
||||
wClickCalled = $0012; {TaskMaster codes - system click called }
|
||||
wInContent = $0013; {TaskMaster codes - In content region }
|
||||
wInDrag = $0014; {TaskMaster codes - In drag region }
|
||||
wInGrow = $0015; {TaskMaster codes - In grow region, active window only }
|
||||
wInGoAway = $0016; {TaskMaster codes - In go-away region, active window only }
|
||||
wInZoom = $0017; {TaskMaster codes - In zoom region, active window only }
|
||||
wInInfo = $0018; {TaskMaster codes - In information bar }
|
||||
wInSpecial = $0019; {TaskMaster codes - Item ID selected was 250 - 255 }
|
||||
wInDeskItem = $001A; {TaskMaster codes - Item ID selected was 1 - 249 }
|
||||
wInFrame = $1B; {TaskMaster codes - in Frame, but not on anything else }
|
||||
wInactMenu = $1C; {TaskMaster codes - "selection" of inactive menu item }
|
||||
wClosedNDA = $001D; {TaskMaster codes - desk accessory closed }
|
||||
wCalledSysEdit = $001E; {TaskMaster codes - inactive menu item selected }
|
||||
wInSysWindow = $8000; {TaskMaster codes - hi bit set for system windows }
|
||||
wDraw = $00; {VarCode - Draw window frame command. }
|
||||
wHit = $01; {VarCode - Hit test command. }
|
||||
wCalcRgns = $02; {VarCode - Compute regions command. }
|
||||
wNew = $03; {VarCode - Initialization command. }
|
||||
wDispose = $04; {VarCode - Dispose command. }
|
||||
fHilited = $0001; {WFrame - Window is highlighted. }
|
||||
fZoomed = $0002; {WFrame - Window is zoomed. }
|
||||
fAllocated = $0004; {WFrame - Window record was allocated. }
|
||||
fCtlTie = $0008; {WFrame - Window state tied to controls. }
|
||||
fInfo = $0010; {WFrame - Window has an information bar. }
|
||||
fVis = $0020; {WFrame - Window is visible. }
|
||||
fQContent = $0040; {WFrame - }
|
||||
fMove = $0080; {WFrame - Window is movable. }
|
||||
fZoom = $0100; {WFrame - Window is zoomable. }
|
||||
fFlex = $0200; {WFrame - }
|
||||
fGrow = $0400; {WFrame - Window has grow box. }
|
||||
fBScroll = $0800; {WFrame - Window has horizontal scroll bar. }
|
||||
fRScroll = $1000; {WFrame - Window has vertical scroll bar. }
|
||||
fAlert = $2000; {WFrame - }
|
||||
fClose = $4000; {WFrame - Window has a close box. }
|
||||
fTitle = $8000; {WFrame - Window has a title bar. }
|
||||
windSize = $145; {WindRec - Size of WindRec. }
|
||||
wmTaskRecSize = $0046; {WmTaskRec - Size of WmTaskRec. }
|
||||
wTrackZoom = $001F; { - }
|
||||
wHitFrame = $0020; { - }
|
||||
wInControl = $0021; { - }
|
||||
|
||||
TYPE
|
||||
WmTaskRec = EventRecord ;
|
||||
|
||||
|
||||
WmTaskRecPtr = EventRecordPtr ;
|
||||
|
||||
WindColorHndl = ^WindColorPtr;
|
||||
WindColorPtr = ^WindColor;
|
||||
WindColor = RECORD
|
||||
frameColor : Integer; { Color of window frame. }
|
||||
titleColor : Integer; { Color of title and bar. }
|
||||
tBarColor : Integer; { Color/pattern of title bar. }
|
||||
growColor : Integer; { Color of grow box. }
|
||||
infoColor : Integer; { Color of information bar. }
|
||||
END;
|
||||
WindRecPtr = ^WindRec;
|
||||
WindRec = RECORD
|
||||
port : GrafPort; { Window's port }
|
||||
wDefProc : ProcPtr;
|
||||
wRefCon : Longint;
|
||||
wContDraw : ProcPtr;
|
||||
wReserved : Longint; { Space for future expansion }
|
||||
wStrucRgn : RgnHandle; { Region of frame plus content. }
|
||||
wContRgn : RgnHandle; { Content region. }
|
||||
wUpdateRgn : RgnHandle; { Update region. }
|
||||
wControls : CtlRecHndl; { Window's control list. }
|
||||
wFrameCtrls : CtlRecHndl; { Window frame's control list. }
|
||||
wFrame : Integer;
|
||||
END;
|
||||
WindowChainPtr = ^WindowChain;
|
||||
WindowChain = RECORD
|
||||
wNext : WindowChainPtr;
|
||||
theWindow : WindRec;
|
||||
END;
|
||||
ParamListHndl = ^ParamListPtr;
|
||||
ParamListPtr = ^ParamList;
|
||||
ParamList = RECORD
|
||||
paramLength : Integer; { Parameter to NewWindow. }
|
||||
wFrameBits : Integer; { Parameter to NewWindow. }
|
||||
wTitle : Ptr; { Parameter to NewWindow. }
|
||||
wRefCon : Longint; { Parameter to NewWindow. }
|
||||
wZoom : Rect; { Parameter to NewWindow. }
|
||||
wColor : WindColorPtr; { Parameter to NewWindow. }
|
||||
wYOrigin : Integer; { Parameter to NewWindow. }
|
||||
wXOrigin : Integer; { Parameter to NewWindow. }
|
||||
wDataH : Integer; { Parameter to NewWindow. }
|
||||
wDataW : Integer; { Parameter to NewWindow. }
|
||||
wMaxH : Integer; { Parameter to NewWindow. }
|
||||
wMaxW : Integer; { Parameter to NewWindow. }
|
||||
wScrollVer : Integer; { Parameter to NewWindow. }
|
||||
wScrollHor : Integer; { Parameter to NewWindow. }
|
||||
wPageVer : Integer; { Parameter to NewWindow. }
|
||||
wPageHor : Integer; { Parameter to NewWindow. }
|
||||
wInfoRefCon : Longint; { Parameter to NewWindow. }
|
||||
wInfoHeight : Integer; { height of information bar }
|
||||
wFrameDefProc : LongProcPtr; { Parameter to NewWindow. }
|
||||
wInfoDefProc : VoidProcPtr; { Parameter to NewWindow. }
|
||||
wContDefProc : VoidProcPtr; { Parameter to NewWindow. }
|
||||
wPosition : Rect; { Parameter to NewWindow. }
|
||||
wPlane : WindowPtr; { Parameter to NewWindow. }
|
||||
wStorage : WindowChainPtr; { Parameter to NewWindow. }
|
||||
END;
|
||||
DeskMessageRecordPtr = ^DeskMessageRecord;
|
||||
DeskMessageRecord = RECORD
|
||||
reserved : Longint;
|
||||
messageType : Integer;
|
||||
drawType : Integer;
|
||||
END;
|
||||
FUNCTION AlertWindow ( alertFlags:Integer; subStrPtr:Ptr; alertStrPtr:Ref) :
|
||||
Integer ; Tool $0E,$59;
|
||||
PROCEDURE DrawInfoBar ( theWindowPtr:WindowPtr) ; Tool $0E,$55;
|
||||
PROCEDURE EndFrameDrawing ; Tool $0E,$5B;
|
||||
FUNCTION GetWindowMgrGlobals : Longint ; Tool $0E,$58;
|
||||
PROCEDURE ResizeWindow ( hiddenFlag:Integer; U__rectPtr:Rect;
|
||||
theWindowPtr:WindowPtr) ; Tool $0E,$5C;
|
||||
PROCEDURE StartFrameDrawing ( windowPtr:Longint) ; Tool $0E,$5A;
|
||||
PROCEDURE WindBootInit ; Tool $0E,$01;
|
||||
PROCEDURE WindStartUp ( userID:Integer) ; Tool $0E,$02;
|
||||
PROCEDURE WindShutDown ; Tool $0E,$03;
|
||||
FUNCTION WindVersion : Integer ; Tool $0E,$04;
|
||||
PROCEDURE WindReset ; Tool $0E,$05;
|
||||
FUNCTION WindStatus : Boolean ; Tool $0E,$06;
|
||||
PROCEDURE BeginUpdate ( theWindowPtr:WindowPtr) ; Tool $0E,$1E;
|
||||
PROCEDURE BringToFront ( theWindowPtr:WindowPtr) ; Tool $0E,$24;
|
||||
FUNCTION CheckUpdate ( theEventPtr:EventRecordPtr) : Boolean ; Tool $0E,$0A;
|
||||
PROCEDURE CloseWindow ( theWindowPtr:WindowPtr) ; Tool $0E,$0B;
|
||||
FUNCTION Desktop ( deskTopOP:Integer; dtParam:Longint) : Ptr ; Tool $0E,$0C;
|
||||
PROCEDURE DragWindow ( grid:Integer; startX:Integer; startY:Integer;
|
||||
grace:Integer; boundsRectPtr:RectPtr; theWindowPtr:WindowPtr) ; Tool $0E,$1A;
|
||||
PROCEDURE EndInfoDrawing ; Tool $0E,$51;
|
||||
PROCEDURE EndUpdate ( theWindowPtr:WindowPtr) ; Tool $0E,$1F;
|
||||
FUNCTION FindWindow (VAR theWindowPtr:WindowPtr; pointX:Integer;
|
||||
pointY:Integer) : Integer ; Tool $0E,$17;
|
||||
FUNCTION FrontWindow : WindowPtr ; Tool $0E,$15;
|
||||
FUNCTION GetContentDraw ( theWindowPtr:WindowPtr) : VoidProcPtr ; Tool $0E,$48;
|
||||
FUNCTION GetContentOrigin ( theWindowPtr:WindowPtr) : Point ; Tool $0E,$3E;
|
||||
FUNCTION GetContentRgn ( theWindowPtr:WindowPtr) : RgnHandle ; Tool $0E,$2F;
|
||||
FUNCTION GetDataSize ( theWindowPtr:WindowPtr) : Longint ; Tool $0E,$40;
|
||||
FUNCTION GetDefProc ( theWindowPtr:WindowPtr) : LongProcPtr ; Tool $0E,$31;
|
||||
FUNCTION GetFirstWindow : WindowPtr ; Tool $0E,$52;
|
||||
PROCEDURE GetFrameColor (VAR colorPtr:WindColorPtr; theWindowPtr:WindowPtr) ;
|
||||
Tool $0E,$10;
|
||||
FUNCTION GetInfoDraw ( theWindowPtr:WindowPtr) : VoidProcPtr ; Tool $0E,$4A;
|
||||
FUNCTION GetInfoRefCon ( theWindowPtr:WindowPtr) : Longint ; Tool $0E,$35;
|
||||
FUNCTION GetMaxGrow ( theWindowPtr:WindowPtr) : Longint ; Tool $0E,$42;
|
||||
FUNCTION GetNextWindow ( theWindowPtr:WindowPtr) : WindowPtr ; Tool $0E,$2A;
|
||||
FUNCTION GetPage ( theWindowPtr:WindowPtr) : Longint ; Tool $0E,$46;
|
||||
PROCEDURE GetRectInfo (VAR infoRectPtr:Rect; theWindowPtr:WindowPtr) ; Tool
|
||||
$0E,$4F;
|
||||
FUNCTION GetScroll ( theWindowPtr:WindowPtr) : Longint ; Tool $0E,$44;
|
||||
FUNCTION GetStructRgn ( theWindowPtr:WindowPtr) : RgnHandle ; Tool $0E,$2E;
|
||||
FUNCTION GetSysWFlag ( theWindowPtr:WindowPtr) : Boolean ; Tool $0E,$4C;
|
||||
FUNCTION GetUpdateRgn ( theWindowPtr:WindowPtr) : RgnHandle ; Tool $0E,$30;
|
||||
FUNCTION GetWControls ( theWindowPtr:WindowPtr) : CtlRecHndl ; Tool $0E,$33;
|
||||
FUNCTION GetWFrame ( theWindowPtr:WindowPtr) : Integer ; Tool $0E,$2C;
|
||||
FUNCTION GetWKind ( theWindowPtr:WindowPtr) : Integer ; Tool $0E,$2B;
|
||||
FUNCTION GetWMgrPort : WindowPtr ; Tool $0E,$20;
|
||||
FUNCTION GetWRefCon ( theWindowPtr:WindowPtr) : Longint ; Tool $0E,$29;
|
||||
FUNCTION GetWTitle ( theWindowPtr:WindowPtr) : Ptr ; Tool $0E,$0E;
|
||||
FUNCTION GetZoomRect ( theWindowPtr:WindowPtr) : RectPtr ; Tool $0E,$37;
|
||||
FUNCTION GrowWindow ( minWidth:Integer; minHeight:Integer; startX:Integer;
|
||||
startY:Integer; theWindowPtr:WindowPtr) : Longint ; Tool $0E,$1B;
|
||||
PROCEDURE HideWindow ( theWindowPtr:WindowPtr) ; Tool $0E,$12;
|
||||
PROCEDURE HiliteWindow ( fHiliteFlag:Boolean; theWindowPtr:WindowPtr) ; Tool
|
||||
$0E,$22;
|
||||
PROCEDURE InvalRect ( badRectPtr:Rect) ; Tool $0E,$3A;
|
||||
PROCEDURE InvalRgn ( badRgnHandle:RgnHandle) ; Tool $0E,$3B;
|
||||
PROCEDURE MoveWindow ( newX:Integer; newY:Integer; theWindowPtr:WindowPtr) ;
|
||||
Tool $0E,$19;
|
||||
FUNCTION NewWindow ( theParamListPtr:ParamList) : WindowPtr ; Tool $0E,$09;
|
||||
FUNCTION PinRect ( theXPt:Integer; theYPt:Integer; theRectPtr:Rect) : Point ;
|
||||
Tool $0E,$21;
|
||||
PROCEDURE RefreshDesktop ( redrawRect:RectPtr) ; Tool $0E,$39;
|
||||
PROCEDURE SelectWindow ( theWindowPtr:WindowPtr) ; Tool $0E,$11;
|
||||
PROCEDURE SendBehind ( behindWindowPtr:WindowPtr; theWindowPtr:WindowPtr) ;
|
||||
Tool $0E,$14;
|
||||
PROCEDURE SetContentDraw ( contentDrawPtr:VoidProcPtr; theWindowPtr:WindowPtr)
|
||||
; Tool $0E,$49;
|
||||
PROCEDURE SetContentOrigin ( xOrigin:Integer; yOrigin:Integer;
|
||||
theWindowPtr:WindowPtr) ; Tool $0E,$3F;
|
||||
PROCEDURE SetContentOrigin2 ( scrollFlag:Integer; xOrigin:Integer;
|
||||
yOrigin:Integer; theWindowPtr:WindowPtr) ; Tool $0E,$57;
|
||||
PROCEDURE SetDataSize ( dataWidth:Integer; dataHeight:Integer;
|
||||
theWindowPtr:WindowPtr) ; Tool $0E,$41;
|
||||
PROCEDURE SetDefProc ( wDefProcPtr:LongProcPtr; theWindowPtr:WindowPtr) ; Tool
|
||||
$0E,$32;
|
||||
PROCEDURE SetFrameColor ( newColorPtr:WindColorPtr; theWindowPtr:WindowPtr) ;
|
||||
Tool $0E,$0F;
|
||||
PROCEDURE SetInfoDraw ( infoRecCon:VoidProcPtr; theWindowPtr:WindowPtr) ; Tool
|
||||
$0E,$16;
|
||||
PROCEDURE SetInfoRefCon ( infoRefCon:Longint; theWindowPtr:WindowPtr) ; Tool
|
||||
$0E,$36;
|
||||
PROCEDURE SetMaxGrow ( maxWidth:Integer; maxHeight:Integer;
|
||||
theWindowPtr:WindowPtr) ; Tool $0E,$43;
|
||||
PROCEDURE SetOriginMask ( originMask:Integer; theWindowPtr:WindowPtr) ; Tool
|
||||
$0E,$34;
|
||||
PROCEDURE SetPage ( hPage:Integer; vPage:Integer; theWindowPtr:WindowPtr) ;
|
||||
Tool $0E,$47;
|
||||
PROCEDURE SetScroll ( hScroll:Integer; vScroll:Integer; theWindowPtr:WindowPtr)
|
||||
; Tool $0E,$45;
|
||||
PROCEDURE SetSysWindow ( theWindowPtr:WindowPtr) ; Tool $0E,$4B;
|
||||
PROCEDURE SetWFrame ( wFrame:Integer; theWindowPtr:WindowPtr) ; Tool $0E,$2D;
|
||||
FUNCTION SetWindowIcons ( newFontHandle:FontHndl) : FontHndl ; Tool $0E,$4E;
|
||||
PROCEDURE SetWRefCon ( wRefCon:Longint; theWindowPtr:WindowPtr) ; Tool
|
||||
$0E,$28;
|
||||
PROCEDURE SetWTitle ( title:Str255; theWindowPtr:WindowPtr) ; Tool $0E,$0D;
|
||||
PROCEDURE SetZoomRect ( wZoomSizePtr:Rect; theWindowPtr:WindowPtr) ; Tool
|
||||
$0E,$38;
|
||||
PROCEDURE ShowHide ( showFlag:Boolean; theWindowPtr:WindowPtr) ; Tool $0E,$23;
|
||||
PROCEDURE ShowWindow ( theWindowPtr:WindowPtr) ; Tool $0E,$13;
|
||||
PROCEDURE SizeWindow ( newWidth:Integer; newHeight:Integer;
|
||||
theWindowPtr:WindowPtr) ; Tool $0E,$1C;
|
||||
PROCEDURE StartDrawing ( theWindowPtr:WindowPtr) ; Tool $0E,$4D;
|
||||
PROCEDURE StartInfoDrawing (VAR infoRectPtr:Rect; theWindowPtr:WindowPtr) ;
|
||||
Tool $0E,$50;
|
||||
FUNCTION TaskMaster ( taskMask:Integer; taskRecPtr:WmTaskRec) : Integer ; Tool
|
||||
$0E,$1D;
|
||||
FUNCTION TrackGoAway ( startX:Integer; startY:Integer; theWindowPtr:WindowPtr)
|
||||
: Boolean ; Tool $0E,$18;
|
||||
FUNCTION TrackZoom ( startX:Integer; startY:Integer; theWindowPtr:WindowPtr) :
|
||||
Boolean ; Tool $0E,$26;
|
||||
PROCEDURE ValidRect ( goodRectPtr:Rect) ; Tool $0E,$3C;
|
||||
PROCEDURE ValidRgn ( goodRgnHandle:RgnHandle) ; Tool $0E,$3D;
|
||||
FUNCTION WindDragRect ( actionProcPtr:VoidProcPtr; dragPatternPtr:Pattern;
|
||||
startX:Integer; startY:Integer; dragRectPtr:Rect; limitRectPtr:Rect;
|
||||
slopRectPtr:Rect; dragFlag:Integer) : Longint ; Tool $0E,$53;
|
||||
PROCEDURE WindNewRes ; Tool $0E,$25;
|
||||
FUNCTION WindowGlobal ( WindowGlobalMask:Integer) : Integer ; Tool $0E,$56;
|
||||
PROCEDURE ZoomWindow ( theWindowPtr:WindowPtr) ; Tool $0E,$27;
|
||||
FUNCTION TaskMasterDA ( eventMask:Integer; taskRecPtr:Ptr) : Integer ; Tool
|
||||
$0E,$5F;
|
||||
FUNCTION CompileText ( subType:Integer; subStringsPtr:Ptr; srcStringPtr:Ptr;
|
||||
srcSize:Integer) : Handle ; Tool $0E,$60;
|
||||
FUNCTION NewWindow2 ( titlePtr:StringPtr; refCon:Longint;
|
||||
contentDrawPtr:ProcPtr; defProcPtr:ProcPtr; paramTableDesc:RefDescriptor;
|
||||
paramTableRef:Ref; resourceType:Integer) : WindowPtr ; Tool $0E,$61;
|
||||
FUNCTION ErrorWindow ( subType:Integer; subStringPtr:Ptr; errNum:Integer) :
|
||||
Integer ; Tool $0E,$62;
|
||||
IMPLEMENTATION
|
||||
END.
|
|
@ -0,0 +1,144 @@
|
|||
#pragma once
|
||||
|
||||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* The ProDOS 16 tool calls
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
uint16_t call;
|
||||
const char *name;
|
||||
} Prodos16;
|
||||
|
||||
static Prodos16 prodos16[] = {
|
||||
{0x0001, "CREATE"},
|
||||
{0x0002, "DESTROY"},
|
||||
{0x0004, "CHANGE_PATH"},
|
||||
{0x0005, "SET_FILE_INFO"},
|
||||
{0x0006, "GET_FILE_INFO"},
|
||||
{0x0008, "VOLUME"},
|
||||
{0x0009, "SET_PREFIX"},
|
||||
{0x000a, "GET_PREFIX"},
|
||||
{0x000b, "CLEAR_BACKUP_BIT"},
|
||||
{0x0010, "OPEN"},
|
||||
{0x0011, "NEWLINE"},
|
||||
{0x0012, "READ"},
|
||||
{0x0013, "WRITE"},
|
||||
{0x0014, "CLOSE"},
|
||||
{0x0015, "FLUSH"},
|
||||
{0x0016, "SET_MARK"},
|
||||
{0x0017, "GET_MARK"},
|
||||
{0x0018, "SET_EOF"},
|
||||
{0x0019, "GET_EOF"},
|
||||
{0x001a, "SET_LEVEL"},
|
||||
{0x001b, "GET_LEVEL"},
|
||||
{0x001c, "GET_DIR_ENTRY"},
|
||||
{0x0020, "GET_DEV_NUM"},
|
||||
{0x0021, "GET_LAST_DEV"},
|
||||
{0x0022, "READ_BLOCK"},
|
||||
{0x0023, "WRITE_BLOCK"},
|
||||
{0x0024, "FORMAT"},
|
||||
{0x0025, "ERASE_DISK"},
|
||||
{0x0027, "GET_NAME"},
|
||||
{0x0028, "GET_BOOT_VOL"},
|
||||
{0x0029, "QUIT"},
|
||||
{0x002a, "GET_VERSION"},
|
||||
{0x002c, "D_INFO"},
|
||||
{0x0031, "ALLOC_INTERRUPT"},
|
||||
{0x0032, "DEALLOCATE_INTERRUPT"},
|
||||
{0x0101, "Get_LInfo"},
|
||||
{0x0102, "Set_LInfo"},
|
||||
{0x0103, "Get_Lang"},
|
||||
{0x0104, "Set_Lang"},
|
||||
{0x0105, "Error"},
|
||||
{0x0106, "Set_Variable"},
|
||||
{0x0107, "Version"},
|
||||
{0x0108, "Read_Indexed"},
|
||||
{0x0109, "Init_Wildcard"},
|
||||
{0x010a, "Next_Wildcard"},
|
||||
{0x010b, "Read_Variable"},
|
||||
{0x010c, "ChangeVector"},
|
||||
{0x010d, "Execute"},
|
||||
{0x010e, "FastFile"},
|
||||
{0x010f, "Direction"},
|
||||
{0x0110, "Redirect"},
|
||||
{0x0113, "Stop"},
|
||||
{0x0114, "ExpandDevices"},
|
||||
{0x0115, "UnsetVariable"},
|
||||
{0x0116, "Export"},
|
||||
{0x0117, "PopVariables"},
|
||||
{0x0118, "PushVariables"},
|
||||
{0x0119, "SetStopFlag"},
|
||||
{0x011a, "ConsoleOut"},
|
||||
{0x011b, "SetIODevices"},
|
||||
{0x011c, "GetIODevices"},
|
||||
{0x011d, "GetCommand"},
|
||||
{0x2001, "Create"},
|
||||
{0x2002, "Destroy"},
|
||||
{0x2003, "OSShutdown"},
|
||||
{0x2004, "ChangePath"},
|
||||
{0x2005, "SetFileInfo"},
|
||||
{0x2006, "GetFileInfo"},
|
||||
{0x2007, "JudgeName"},
|
||||
{0x2008, "Volume"},
|
||||
{0x2009, "SetPrefix"},
|
||||
{0x200a, "GetPrefix"},
|
||||
{0x200b, "ClearBackup"},
|
||||
{0x200c, "SetSysPrefs"},
|
||||
{0x200d, "Null"},
|
||||
{0x200e, "ExpandPath"},
|
||||
{0x200f, "GetSysPrefs"},
|
||||
{0x2010, "Open"},
|
||||
{0x2011, "NewLine"},
|
||||
{0x2012, "Read"},
|
||||
{0x2013, "Write"},
|
||||
{0x2014, "Close"},
|
||||
{0x2015, "Flush"},
|
||||
{0x2016, "SetMark"},
|
||||
{0x2017, "GetMark"},
|
||||
{0x2018, "SetEOF"},
|
||||
{0x2019, "GetEOF"},
|
||||
{0x201a, "SetLevel"},
|
||||
{0x201b, "GetLevel"},
|
||||
{0x201c, "GetDirEntry"},
|
||||
{0x201d, "BeginSession"},
|
||||
{0x201e, "EndSession"},
|
||||
{0x201f, "SessionStatus"},
|
||||
{0x2020, "GetDevNumber"},
|
||||
{0x2024, "Format"},
|
||||
{0x2025, "EraseDisk"},
|
||||
{0x2026, "ResetCache"},
|
||||
{0x2027, "GetName"},
|
||||
{0x2028, "GetBoolVol"},
|
||||
{0x2029, "Quit"},
|
||||
{0x202a, "GetVersion"},
|
||||
{0x202b, "GetFSTInfo"},
|
||||
{0x202c, "DInfo"},
|
||||
{0x202d, "DStatus"},
|
||||
{0x202e, "DControl"},
|
||||
{0x202f, "DRead"},
|
||||
{0x2030, "DWrite"},
|
||||
{0x2031, "BindInt"},
|
||||
{0x2032, "UnbindInt"},
|
||||
{0x2033, "FSTSpecific"},
|
||||
{0x2034, "AddNotifyProc"},
|
||||
{0x2035, "DelNotifyProc"},
|
||||
{0x2036, "DRename"},
|
||||
{0x2037, "GetStdRefNum"},
|
||||
{0x2038, "GetRefNum"},
|
||||
{0x2039, "GetRefInfo"},
|
||||
{0x203a, "SetStdRefNum"}
|
||||
};
|
||||
|
||||
#define numProdos16 (sizeof(prodos16) / sizeof(prodos16[0]))
|
||||
|
||||
static const char *prodos16Lookup(uint16_t call) {
|
||||
for (int i = 0; i < numProdos16; i++) {
|
||||
if (prodos16[i].call >= call) {
|
||||
if (prodos16[i].call == call)
|
||||
return prodos16[i].name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
#pragma once
|
||||
|
||||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* Defines the ProDOS 8 tool calls
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
uint16_t call;
|
||||
const char *name;
|
||||
} Prodos8;
|
||||
|
||||
static Prodos8 prodos8[] = {
|
||||
{0x0040, "ALLOC_INTERRUPT"},
|
||||
{0x0041, "DEALLOC_INTERRUPT"},
|
||||
{0x0042, "AppleTalk"},
|
||||
{0x0043, "SpecialOpenFork"},
|
||||
{0x0044, "ByteRangeLock"},
|
||||
{0x0065, "QUIT"},
|
||||
{0x0080, "READ_BLOCK"},
|
||||
{0x0081, "WRITE_BLOCK"},
|
||||
{0x0082, "GET_TIME"},
|
||||
{0x00c0, "CREATE"},
|
||||
{0x00c1, "DESTROY"},
|
||||
{0x00c2, "RENAME"},
|
||||
{0x00c3, "SetFileInfo"},
|
||||
{0x00c4, "GetFileInfo"},
|
||||
{0x00c5, "ONLINE"},
|
||||
{0x00c6, "SET_PREFIX"},
|
||||
{0x00c7, "GET_PREFIX"},
|
||||
{0x00c8, "OPEN"},
|
||||
{0x00c9, "NEWLINE"},
|
||||
{0x00ca, "READ"},
|
||||
{0x00cb, "WRITE"},
|
||||
{0x00cc, "CLOSE"},
|
||||
{0x00cd, "FLUSH"},
|
||||
{0x00ce, "SET_MARK"},
|
||||
{0x00cf, "GET_MARK"},
|
||||
{0x00d0, "SET_EOF"},
|
||||
{0x00d1, "GET_EOF"},
|
||||
{0x00d2, "SET_BUF"},
|
||||
{0x00d3, "GET_BUF"}
|
||||
};
|
||||
|
||||
#define numProdos8 (sizeof(prodos8) / sizeof(prodos8[0]))
|
||||
|
||||
static const char *prodos8Lookup(uint16_t call) {
|
||||
for (int i = 0; i < numProdos8; i++) {
|
||||
if (prodos8[i].call >= call) {
|
||||
if (prodos8[i].call == call)
|
||||
return prodos8[i].name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* The main disassembler
|
||||
*/
|
||||
|
||||
#include <argp.h>
|
||||
#include "handle.h"
|
||||
#include "scan.h"
|
||||
#include "disasm.h"
|
||||
|
||||
const char *argp_program_version = "regs 0.1";
|
||||
const char *argp_program_bug_address = "sean@seancode.com";
|
||||
static char doc[] = "Disassemble Apple IIgs software";
|
||||
static char args_doc[] = "FILE or MAP";
|
||||
static struct argp_option options[] = {
|
||||
{"org", 'o', "ADDRESS", 0,
|
||||
"Starting address of the binary file, in hex"},
|
||||
{"m", 'm', 0, OPTION_ARG_OPTIONAL,
|
||||
"Start with 8-bit accumulator"},
|
||||
{"x", 'x', 0, OPTION_ARG_OPTIONAL,
|
||||
"Start with 8-bit indices"},
|
||||
{"e", 'e', 0, OPTION_ARG_OPTIONAL,
|
||||
"Start in emulation mode"},
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
struct arguments {
|
||||
char *filename;
|
||||
uint32_t org;
|
||||
MapFlags flags;
|
||||
};
|
||||
|
||||
static inline uint32_t parseNum(const char *s) {
|
||||
uint32_t res = 0;
|
||||
while (isspace(*s)) {
|
||||
s++;
|
||||
}
|
||||
while (isxdigit(*s)) {
|
||||
res <<= 4;
|
||||
if (*s >= '0' && *s <= '9') {
|
||||
res |= *s - '0';
|
||||
} else if (*s >= 'a' && *s <= 'f') {
|
||||
res |= *s - 'a' + 10;
|
||||
} else if (*s >= 'A' && *s <= 'F') {
|
||||
res |= *s - 'A' + 10;
|
||||
}
|
||||
s++;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
||||
struct arguments *arguments = state->input;
|
||||
switch (key) {
|
||||
case 'o':
|
||||
if (arg) {
|
||||
arguments->org = parseNum(arg);
|
||||
}
|
||||
break;
|
||||
case 'm':
|
||||
if (arg) {
|
||||
arguments->flags |= IsM8;
|
||||
}
|
||||
break;
|
||||
case 'x':
|
||||
if (arg) {
|
||||
arguments->flags |= IsX8;
|
||||
}
|
||||
break;
|
||||
case 'e':
|
||||
if (arg) {
|
||||
arguments->flags |= IsEmu;
|
||||
}
|
||||
break;
|
||||
case ARGP_KEY_ARG:
|
||||
if (state->arg_num >= 1) {
|
||||
argp_usage(state);
|
||||
}
|
||||
arguments->filename = arg;
|
||||
break;
|
||||
case ARGP_KEY_END:
|
||||
if (state->arg_num < 1) {
|
||||
argp_usage(state);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return ARGP_ERR_UNKNOWN;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct argp argp = { options, parse_opt, args_doc, doc };
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
struct arguments arguments;
|
||||
arguments.filename = "";
|
||||
arguments.org = 0x300;
|
||||
arguments.flags = IsOpcode;
|
||||
argp_parse(&argp, argc, argv, 0, 0, &arguments);
|
||||
|
||||
// load the map, if it exists
|
||||
Map *map = loadMap(arguments.filename, arguments.org, arguments.flags);
|
||||
|
||||
// load the file
|
||||
FILE *f = fopen(map->filename, "rb");
|
||||
if (!f) {
|
||||
fprintf(stderr, "Failed to open '%s'\n", map->filename);
|
||||
return -1;
|
||||
}
|
||||
fseek(f, 0, SEEK_END);
|
||||
size_t len = ftell(f);
|
||||
fseek(f, 0, SEEK_SET);
|
||||
uint8_t *data = malloc(len);
|
||||
fread(data, len, 1, f);
|
||||
fclose(f);
|
||||
|
||||
scan(data, len, map);
|
||||
disassemble(data, len, map);
|
||||
free(data);
|
||||
}
|
|
@ -0,0 +1,185 @@
|
|||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* The tracing scanner.
|
||||
*/
|
||||
#include "scan.h"
|
||||
#include "65816.h"
|
||||
#include "handle.h"
|
||||
|
||||
typedef struct {
|
||||
uint32_t address;
|
||||
MapFlags flags;
|
||||
} Scan;
|
||||
|
||||
typedef struct {
|
||||
uint32_t max;
|
||||
uint32_t num;
|
||||
Scan *values;
|
||||
} List;
|
||||
|
||||
static void initList(List *list) {
|
||||
list->max = 1024;
|
||||
list->num = 0;
|
||||
list->values = malloc(sizeof(Scan) * list->max);
|
||||
}
|
||||
|
||||
static void freeList(List *list) {
|
||||
free(list->values);
|
||||
}
|
||||
|
||||
static void appendList(List *list, uint32_t address, MapFlags flags) {
|
||||
list->values[list->num].address = address;
|
||||
list->values[list->num].flags = flags;
|
||||
list->num++;
|
||||
if (list->num == list->max) {
|
||||
list->max *= 1.6;
|
||||
list->values = realloc(list->values, sizeof(Scan) * list->max);
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t fillMem(uint32_t address, int len, MapFlags flags, Map *map) {
|
||||
for (int i = 0; i < len; i++) {
|
||||
map->mem[address++ - map->minMemory] = flags;
|
||||
}
|
||||
return address;
|
||||
}
|
||||
|
||||
void scan(uint8_t *data, size_t len, Map *map) {
|
||||
List toScan;
|
||||
initList(&toScan);
|
||||
map->maxMemory = map->minMemory + len;
|
||||
|
||||
map->mem = calloc(len, sizeof(MapFlags));
|
||||
|
||||
for (Rule *rule = map->rules; rule != NULL; rule = rule->next) {
|
||||
appendList(&toScan, rule->address, rule->flags);
|
||||
}
|
||||
|
||||
while (toScan.num > 0) {
|
||||
toScan.num--;
|
||||
MapFlags flags = toScan.values[toScan.num].flags;
|
||||
uint32_t address = toScan.values[toScan.num].address;
|
||||
|
||||
while (address < map->maxMemory) {
|
||||
uint8_t *ptr = data + address - map->minMemory;
|
||||
|
||||
uint8_t opcode = *ptr++;
|
||||
if (map->mem[address - map->minMemory] & IsOperand) {
|
||||
// we jumped into the middle of an opcode.. go backward to clear it
|
||||
uint32_t offset = (address - map->minMemory) - 1;
|
||||
while (offset > 0 && (map->mem[offset] & IsOperand)) {
|
||||
map->mem[offset--] = IsData;
|
||||
}
|
||||
map->mem[offset] = IsData; // overwrite the opcode too.
|
||||
}
|
||||
|
||||
Address mode = opcodes[opcode].address;
|
||||
OpType type = opcodes[opcode].type;
|
||||
if (address + addressSizes[mode] > map->maxMemory) {
|
||||
mode = DB;
|
||||
}
|
||||
|
||||
uint16_t width = addressSizes[mode];
|
||||
if (mode == IMMM && (flags & (IsEmu | IsM8))) {
|
||||
width--;
|
||||
}
|
||||
if (mode == IMMX && (flags & (IsEmu | IsX8))) {
|
||||
width--;
|
||||
}
|
||||
|
||||
if (mode == DB) {
|
||||
map->mem[address++ - map->minMemory] = IsData;
|
||||
} else {
|
||||
map->mem[address++ - map->minMemory] = IsOpcode |
|
||||
(flags & (IsEmu | IsX8 | IsM8));
|
||||
address = fillMem(address, width - 1, IsOperand, map);
|
||||
}
|
||||
|
||||
uint32_t val = 0;
|
||||
int8_t delta;
|
||||
int16_t delta16;
|
||||
|
||||
switch (mode) {
|
||||
case IMM:
|
||||
val = *ptr++;
|
||||
if (opcode == 0xe2) {
|
||||
flags |= val;
|
||||
} else if (opcode == 0xc2) {
|
||||
flags &= ~val;
|
||||
}
|
||||
break;
|
||||
case IMMM:
|
||||
if (flags & (IsEmu | IsM8)) {
|
||||
val = *ptr++;
|
||||
} else {
|
||||
val = r16(ptr); ptr += 2;
|
||||
}
|
||||
break;
|
||||
case IMMX:
|
||||
if (flags & (IsEmu | IsX8)) {
|
||||
val = *ptr++;
|
||||
} else {
|
||||
val = r16(ptr); ptr += 2;
|
||||
}
|
||||
break;
|
||||
case IMMS:
|
||||
val = r16(ptr); ptr += 2;
|
||||
break;
|
||||
case ABS:
|
||||
val = r16(ptr); ptr += 2;
|
||||
val |= address & 0xff0000;
|
||||
break;
|
||||
case ABL:
|
||||
val = r24(ptr); ptr += 3;
|
||||
break;
|
||||
case REL:
|
||||
delta = *ptr++;
|
||||
val = delta + address;
|
||||
break;
|
||||
case RELL:
|
||||
delta16 = r16(ptr); ptr += 2;
|
||||
val = delta16 + address;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (opcode == 0x18 && *ptr == 0xfb) { // clc xce
|
||||
flags &= ~IsEmu; // 16-bit
|
||||
}
|
||||
if (opcode == 0x38 && *ptr == 0xfb) { // sec xce
|
||||
flags |= IsEmu; // 8-bit
|
||||
}
|
||||
|
||||
if (opcode == 0x20) { // jsr
|
||||
if ((val & 0xffff) == 0xc50d || (val & 0xffff) == 0xc70d) { // disk
|
||||
address = fillMem(address, 3, IsData, map); // db, dw
|
||||
if (*ptr++ >= 0x40) {
|
||||
address = fillMem(address, 2, IsData, map); // dw
|
||||
}
|
||||
}
|
||||
if ((val & 0xffff) == 0xbf00) { // prodos8
|
||||
address = fillMem(address, 3, IsData, map); // db, dw
|
||||
}
|
||||
}
|
||||
if (opcode == 0x22) { // jsl
|
||||
if (val == 0xe100a8) {
|
||||
address = fillMem(address, 6, IsData, map); // dw, dd
|
||||
}
|
||||
}
|
||||
|
||||
if (type == BRANCH || (type == CALL && mode != AIX) ||
|
||||
(type == JUMP && mode != IND && mode != AIX)) {
|
||||
if (val >= map->minMemory && val < map->maxMemory &&
|
||||
!(map->mem[val - map->minMemory] & IsOpcode)) {
|
||||
appendList(&toScan, val, flags);
|
||||
}
|
||||
}
|
||||
if (type == BREAK || type == RETURN || type == JUMP) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
freeList(&toScan);
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* The tracing scanner.
|
||||
*/
|
||||
|
||||
#include "map.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
extern void scan(uint8_t *data, size_t len, Map *map);
|
|
@ -0,0 +1,47 @@
|
|||
#pragma once
|
||||
|
||||
/**
|
||||
* @copyright 2018 Sean Kasun
|
||||
* Defines the SmartPort tool calls
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
uint8_t call;
|
||||
const char *name;
|
||||
} SmartPort;
|
||||
|
||||
static SmartPort smartport[] = {
|
||||
{0x00, "Status"},
|
||||
{0x01, "Read"},
|
||||
{0x02, "Write"},
|
||||
{0x03, "Format"},
|
||||
{0x04, "Control"},
|
||||
{0x05, "Init"},
|
||||
{0x06, "Open"},
|
||||
{0x07, "Close"},
|
||||
{0x08, "Read"},
|
||||
{0x09, "Write"},
|
||||
{0x40, "Status"},
|
||||
{0x41, "Read"},
|
||||
{0x42, "Write"},
|
||||
{0x43, "Format"},
|
||||
{0x44, "Control"},
|
||||
{0x45, "Init"},
|
||||
{0x46, "Open"},
|
||||
{0x47, "Close"},
|
||||
{0x48, "Read"},
|
||||
{0x49, "Write"}
|
||||
};
|
||||
|
||||
#define numSmartPort (sizeof(smartport) / sizeof(smartport[0]))
|
||||
|
||||
static const char *smartportLookup(uint8_t call) {
|
||||
for (int i = 0; i < numSmartPort; i++) {
|
||||
if (smartport[i].call >= call) {
|
||||
if (smartport[i].call == call)
|
||||
return smartport[i].name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
Loading…
Reference in New Issue