From c5afd07c71b81b9fc01612eda5710d0fffd2d418 Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Tue, 6 Jul 2021 17:02:37 -0400 Subject: [PATCH] Update the build environment for this project to the latest. --- .DS_Store | Bin 6148 -> 6148 bytes README.md | 2 + abCalc.xcodeproj/project.pbxproj | 923 ++++++++++-------- .../contents.xcworkspacedata | 2 +- .../UserInterfaceState.xcuserstate | Bin 28244 -> 32400 bytes .../xcshareddata/xcschemes/abCalc.xcscheme | 2 +- .../xcschemes/doNotBuild.xcscheme | 91 -- .../xcschemes/xcschememanagement.plist | 7 +- abCalc/Makefile | 12 +- abCalc/abCalcHelp.md | 1 + abCalc/copydir/abCalcHelp | 1 - abCalc/make/config.txt | 5 +- abCalc/make/createDiskImage | 270 +++-- abCalc/make/empty.2mg | Bin 0 -> 819264 bytes abCalc/make/head.mk | 34 +- abCalc/make/launchEmulator | 84 +- abCalc/make/md2teach | Bin 0 -> 143578 bytes abCalc/make/orca-asm | 27 +- abCalc/make/system601.2mg | Bin 10485824 -> 10485824 bytes abCalc/make/tail.mk | 39 +- abCalc/make/tar | Bin 0 -> 43982 bytes abCalc/nda.mk | 66 +- abCalc/shell.mk | 114 ++- 23 files changed, 1079 insertions(+), 601 deletions(-) delete mode 100644 abCalc.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/doNotBuild.xcscheme create mode 100644 abCalc/abCalcHelp.md delete mode 100644 abCalc/copydir/abCalcHelp create mode 100644 abCalc/make/empty.2mg create mode 100644 abCalc/make/md2teach create mode 100644 abCalc/make/tar diff --git a/.DS_Store b/.DS_Store index 4dec4daa019f6195f98f7b5ee40e17ac919e342e..28b10a2bd5089b4e00c33a02f70a55206c67c8c4 100644 GIT binary patch delta 74 zcmZoMXffDe$Hg MQH5h($ delta 65 zcmZoMXffDe$H>I~da?tf22V<9NiqY&)jR*=85n>9YJ4d!C_)<;jTj9!e`FM6o7f<> JnVsV=KLE=`72f~= diff --git a/README.md b/README.md index 8d49009..3e2db62 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,5 @@ The abCalc binary is a shell command you can use from GNO/ME: And abCalcNDA is a new desk accessory which you can use from within GS/OS applications: ![abCalc NDA Screenshot](/abCalc/screenshots/abCalcNDA.png "abCalc NDA Screenshot") + +[abCalc NDA Documentation](/abCalc/abCalcHelp.md) diff --git a/abCalc.xcodeproj/project.pbxproj b/abCalc.xcodeproj/project.pbxproj index 4c6e68f..2c852b9 100644 --- a/abCalc.xcodeproj/project.pbxproj +++ b/abCalc.xcodeproj/project.pbxproj @@ -7,178 +7,237 @@ objects = { /* Begin PBXBuildFile section */ - 9DFA29AA22FBB4E500CFBC74 /* nda.mk in Sources */ = {isa = PBXBuildFile; fileRef = 9DFA29A922FBB4E500CFBC74 /* nda.mk */; }; - 9DFA29AD22FBB4E500CFBC74 /* config.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DFA29AC22FBB4E500CFBC74 /* config.txt */; }; - 9DFA29AF22FBB4E500CFBC74 /* createDiskImage in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DFA29AE22FBB4E500CFBC74 /* createDiskImage */; }; - 9DFA29B122FBB4E500CFBC74 /* head.mk in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DFA29B022FBB4E500CFBC74 /* head.mk */; }; - 9DFA29B322FBB4E500CFBC74 /* launchEmulator in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DFA29B222FBB4E500CFBC74 /* launchEmulator */; }; - 9DFA29B522FBB4E500CFBC74 /* orca-asm in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DFA29B422FBB4E500CFBC74 /* orca-asm */; }; - 9DFA29B722FBB4E500CFBC74 /* orca-cc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DFA29B622FBB4E500CFBC74 /* orca-cc */; }; - 9DFA29B922FBB4E500CFBC74 /* orca-rez in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DFA29B822FBB4E500CFBC74 /* orca-rez */; }; - 9DFA29BB22FBB4E500CFBC74 /* system601.2mg in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DFA29BA22FBB4E500CFBC74 /* system601.2mg */; }; - 9DFA29BD22FBB4E500CFBC74 /* tail.mk in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DFA29BC22FBB4E500CFBC74 /* tail.mk */; }; - 9DFA29C022FBB4E500CFBC74 /* abCalc.xcscheme in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DFA29BF22FBB4E500CFBC74 /* abCalc.xcscheme */; }; - 9DFA29D822FBB53500CFBC74 /* abCStack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DFA29D122FBB53400CFBC74 /* abCStack.c */; }; - 9DFA29D922FBB53500CFBC74 /* abCMode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DFA29D422FBB53400CFBC74 /* abCMode.c */; }; - 9DFA29DA22FBB53500CFBC74 /* abCalc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DFA29D522FBB53500CFBC74 /* abCalc.c */; }; - 9DFA29DB22FBB53500CFBC74 /* abCError.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DFA29D622FBB53500CFBC74 /* abCError.c */; }; - 9DFA2A5522FBB67A00CFBC74 /* Makefile in Sources */ = {isa = PBXBuildFile; fileRef = 9DFA2A5422FBB67A00CFBC74 /* Makefile */; }; + 9DBFA5B12694E5DB00B9C5E0 /* nda.mk in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA5B02694E5DB00B9C5E0 /* nda.mk */; }; + 9DBFA5B42694E5DB00B9C5E0 /* config.txt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5B32694E5DB00B9C5E0 /* config.txt */; }; + 9DBFA5B62694E5DB00B9C5E0 /* createDiskImage in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5B52694E5DB00B9C5E0 /* createDiskImage */; }; + 9DBFA5B82694E5DB00B9C5E0 /* head.mk in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5B72694E5DB00B9C5E0 /* head.mk */; }; + 9DBFA5BA2694E5DB00B9C5E0 /* launchEmulator in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5B92694E5DB00B9C5E0 /* launchEmulator */; }; + 9DBFA5BC2694E5DB00B9C5E0 /* md2teach in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5BB2694E5DB00B9C5E0 /* md2teach */; }; + 9DBFA5BE2694E5DB00B9C5E0 /* orca-asm in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5BD2694E5DB00B9C5E0 /* orca-asm */; }; + 9DBFA5C02694E5DB00B9C5E0 /* orca-cc in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5BF2694E5DB00B9C5E0 /* orca-cc */; }; + 9DBFA5C22694E5DB00B9C5E0 /* orca-rez in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5C12694E5DB00B9C5E0 /* orca-rez */; }; + 9DBFA5C42694E5DB00B9C5E0 /* system601.2mg in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5C32694E5DB00B9C5E0 /* system601.2mg */; }; + 9DBFA5C62694E5DB00B9C5E0 /* empty.2mg in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5C52694E5DB00B9C5E0 /* empty.2mg */; }; + 9DBFA5C82694E5DB00B9C5E0 /* tar in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5C72694E5DB00B9C5E0 /* tar */; }; + 9DBFA5CA2694E5DB00B9C5E0 /* tail.mk in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5C92694E5DB00B9C5E0 /* tail.mk */; }; + 9DBFA5CD2694E5DB00B9C5E0 /* abCalc.xcscheme in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DBFA5CC2694E5DB00B9C5E0 /* abCalc.xcscheme */; }; + 9DBFA66D2694E66A00B9C5E0 /* abCalcNDA.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA5FB2694E66A00B9C5E0 /* abCalcNDA.c */; }; + 9DBFA66E2694E66A00B9C5E0 /* abCOpSl.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6022694E66A00B9C5E0 /* abCOpSl.c */; }; + 9DBFA66F2694E66A00B9C5E0 /* abCOpNot.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6052694E66A00B9C5E0 /* abCOpNot.c */; }; + 9DBFA6702694E66A00B9C5E0 /* abCOpTan.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6082694E66A00B9C5E0 /* abCOpTan.c */; }; + 9DBFA6712694E66A00B9C5E0 /* abCOpStws.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA60A2694E66A00B9C5E0 /* abCOpStws.c */; }; + 9DBFA6722694E66A00B9C5E0 /* abCOpSwap.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA60C2694E66A00B9C5E0 /* abCOpSwap.c */; }; + 9DBFA6732694E66A00B9C5E0 /* abCOpAlog.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA60E2694E66A00B9C5E0 /* abCOpAlog.c */; }; + 9DBFA6742694E66A00B9C5E0 /* abCOpB2R.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6112694E66A00B9C5E0 /* abCOpB2R.c */; }; + 9DBFA6752694E66A00B9C5E0 /* abCOpRcws.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6122694E66A00B9C5E0 /* abCOpRcws.c */; }; + 9DBFA6762694E66A00B9C5E0 /* abCOpRl.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6152694E66A00B9C5E0 /* abCOpRl.c */; }; + 9DBFA6772694E66A00B9C5E0 /* abCOpAdd.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6182694E66A00B9C5E0 /* abCOpAdd.c */; }; + 9DBFA6782694E66A00B9C5E0 /* abCOpPi.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA61B2694E66A00B9C5E0 /* abCOpPi.c */; }; + 9DBFA6792694E66A00B9C5E0 /* abCOpTanh.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA61E2694E66A00B9C5E0 /* abCOpTanh.c */; }; + 9DBFA67A2694E66A00B9C5E0 /* abCOpCosh.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6202694E66A00B9C5E0 /* abCOpCosh.c */; }; + 9DBFA67B2694E66A00B9C5E0 /* abCOpSqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6232694E66A00B9C5E0 /* abCOpSqrt.c */; }; + 9DBFA67C2694E66A00B9C5E0 /* abCOpChs.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6242694E66A00B9C5E0 /* abCOpChs.c */; }; + 9DBFA67D2694E66A00B9C5E0 /* abCOpAsin.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6252694E66A00B9C5E0 /* abCOpAsin.c */; }; + 9DBFA67E2694E66A00B9C5E0 /* abCOpDec.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6262694E66A00B9C5E0 /* abCOpDec.c */; }; + 9DBFA67F2694E66A00B9C5E0 /* abCOpAsr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6272694E66A00B9C5E0 /* abCOpAsr.c */; }; + 9DBFA6802694E66A00B9C5E0 /* abCOpLn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA62B2694E66A00B9C5E0 /* abCOpLn.c */; }; + 9DBFA6812694E66B00B9C5E0 /* abCOpAnd.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA62C2694E66A00B9C5E0 /* abCOpAnd.c */; }; + 9DBFA6822694E66B00B9C5E0 /* abCOpAcos.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA62D2694E66A00B9C5E0 /* abCOpAcos.c */; }; + 9DBFA6832694E66B00B9C5E0 /* abCOpOct.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA62E2694E66A00B9C5E0 /* abCOpOct.c */; }; + 9DBFA6842694E66B00B9C5E0 /* abCOpRr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6302694E66A00B9C5E0 /* abCOpRr.c */; }; + 9DBFA6852694E66B00B9C5E0 /* abCOpInv.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6322694E66A00B9C5E0 /* abCOpInv.c */; }; + 9DBFA6862694E66B00B9C5E0 /* abCOpBin.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6342694E66A00B9C5E0 /* abCOpBin.c */; }; + 9DBFA6872694E66B00B9C5E0 /* abCOpXor.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6352694E66A00B9C5E0 /* abCOpXor.c */; }; + 9DBFA6882694E66B00B9C5E0 /* abCOpDiv.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6362694E66A00B9C5E0 /* abCOpDiv.c */; }; + 9DBFA6892694E66B00B9C5E0 /* abCOpSinh.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6382694E66A00B9C5E0 /* abCOpSinh.c */; }; + 9DBFA68A2694E66B00B9C5E0 /* abCOpClear.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA63B2694E66A00B9C5E0 /* abCOpClear.c */; }; + 9DBFA68B2694E66B00B9C5E0 /* abCOpOr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA63C2694E66A00B9C5E0 /* abCOpOr.c */; }; + 9DBFA68C2694E66B00B9C5E0 /* abCOpR2B.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA63D2694E66A00B9C5E0 /* abCOpR2B.c */; }; + 9DBFA68D2694E66B00B9C5E0 /* abCOp.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA63F2694E66A00B9C5E0 /* abCOp.c */; }; + 9DBFA68E2694E66B00B9C5E0 /* abCOpSubtr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6412694E66A00B9C5E0 /* abCOpSubtr.c */; }; + 9DBFA68F2694E66B00B9C5E0 /* abCOpExp.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6432694E66A00B9C5E0 /* abCOpExp.c */; }; + 9DBFA6902694E66B00B9C5E0 /* abCOpCos.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6452694E66A00B9C5E0 /* abCOpCos.c */; }; + 9DBFA6912694E66B00B9C5E0 /* abCOpDrop.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6482694E66A00B9C5E0 /* abCOpDrop.c */; }; + 9DBFA6922694E66B00B9C5E0 /* abCOpSin.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6492694E66A00B9C5E0 /* abCOpSin.c */; }; + 9DBFA6932694E66B00B9C5E0 /* abCOpPower.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA64A2694E66A00B9C5E0 /* abCOpPower.c */; }; + 9DBFA6942694E66B00B9C5E0 /* abCOpSr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA64C2694E66A00B9C5E0 /* abCOpSr.c */; }; + 9DBFA6952694E66B00B9C5E0 /* abCOpMult.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA64F2694E66A00B9C5E0 /* abCOpMult.c */; }; + 9DBFA6962694E66B00B9C5E0 /* abCOpAtan.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6502694E66A00B9C5E0 /* abCOpAtan.c */; }; + 9DBFA6972694E66B00B9C5E0 /* abCOpLog.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6552694E66A00B9C5E0 /* abCOpLog.c */; }; + 9DBFA6982694E66B00B9C5E0 /* abCOpSq.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6562694E66A00B9C5E0 /* abCOpSq.c */; }; + 9DBFA6992694E66B00B9C5E0 /* abCOpHex.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6572694E66A00B9C5E0 /* abCOpHex.c */; }; + 9DBFA69A2694E66B00B9C5E0 /* Makefile in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA65A2694E66A00B9C5E0 /* Makefile */; }; + 9DBFA69B2694E66B00B9C5E0 /* abCMain.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA65C2694E66A00B9C5E0 /* abCMain.c */; }; + 9DBFA69C2694E66B00B9C5E0 /* abCExprInt.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA65F2694E66A00B9C5E0 /* abCExprInt.c */; }; + 9DBFA69D2694E66B00B9C5E0 /* abCExpReal.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6612694E66A00B9C5E0 /* abCExpReal.c */; }; + 9DBFA69E2694E66B00B9C5E0 /* abCExpr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6632694E66A00B9C5E0 /* abCExpr.c */; }; + 9DBFA69F2694E66B00B9C5E0 /* abCalc.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6662694E66A00B9C5E0 /* abCalc.c */; }; + 9DBFA6A02694E66B00B9C5E0 /* abCError.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6672694E66A00B9C5E0 /* abCError.c */; }; + 9DBFA6A12694E66B00B9C5E0 /* abCStack.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA6682694E66A00B9C5E0 /* abCStack.c */; }; + 9DBFA6A22694E66B00B9C5E0 /* abCMode.c in Sources */ = {isa = PBXBuildFile; fileRef = 9DBFA66C2694E66A00B9C5E0 /* abCMode.c */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ - 9DFA29A022FBB4E500CFBC74 /* CopyFiles */ = { + 9DBFA5A72694E5DB00B9C5E0 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = /usr/share/man/man1/; dstSubfolderSpec = 0; files = ( - 9DFA29B322FBB4E500CFBC74 /* launchEmulator in CopyFiles */, - 9DFA29C022FBB4E500CFBC74 /* abCalc.xcscheme in CopyFiles */, - 9DFA29B722FBB4E500CFBC74 /* orca-cc in CopyFiles */, - 9DFA29AF22FBB4E500CFBC74 /* createDiskImage in CopyFiles */, - 9DFA29B922FBB4E500CFBC74 /* orca-rez in CopyFiles */, - 9DFA29AD22FBB4E500CFBC74 /* config.txt in CopyFiles */, - 9DFA29BB22FBB4E500CFBC74 /* system601.2mg in CopyFiles */, - 9DFA29B522FBB4E500CFBC74 /* orca-asm in CopyFiles */, - 9DFA29B122FBB4E500CFBC74 /* head.mk in CopyFiles */, - 9DFA29BD22FBB4E500CFBC74 /* tail.mk in CopyFiles */, + 9DBFA5BC2694E5DB00B9C5E0 /* md2teach in CopyFiles */, + 9DBFA5C22694E5DB00B9C5E0 /* orca-rez in CopyFiles */, + 9DBFA5CA2694E5DB00B9C5E0 /* tail.mk in CopyFiles */, + 9DBFA5CD2694E5DB00B9C5E0 /* abCalc.xcscheme in CopyFiles */, + 9DBFA5BA2694E5DB00B9C5E0 /* launchEmulator in CopyFiles */, + 9DBFA5C62694E5DB00B9C5E0 /* empty.2mg in CopyFiles */, + 9DBFA5BE2694E5DB00B9C5E0 /* orca-asm in CopyFiles */, + 9DBFA5B62694E5DB00B9C5E0 /* createDiskImage in CopyFiles */, + 9DBFA5C82694E5DB00B9C5E0 /* tar in CopyFiles */, + 9DBFA5B42694E5DB00B9C5E0 /* config.txt in CopyFiles */, + 9DBFA5B82694E5DB00B9C5E0 /* head.mk in CopyFiles */, + 9DBFA5C02694E5DB00B9C5E0 /* orca-cc in CopyFiles */, + 9DBFA5C42694E5DB00B9C5E0 /* system601.2mg in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 1; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 9D30A37622FBC1EA00A4DAFA /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - 9DFA299A22FBB4E500CFBC74 /* abCalc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = abCalc; sourceTree = BUILT_PRODUCTS_DIR; }; - 9DFA299D22FBB4E500CFBC74 /* abCalc.2mg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = abCalc.2mg; sourceTree = BUILT_PRODUCTS_DIR; }; - 9DFA29A222FBB4E500CFBC74 /* doNotBuild */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = doNotBuild; sourceTree = BUILT_PRODUCTS_DIR; }; - 9DFA29A922FBB4E500CFBC74 /* nda.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = nda.mk; sourceTree = ""; }; - 9DFA29AC22FBB4E500CFBC74 /* config.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = config.txt; path = make/config.txt; sourceTree = ""; }; - 9DFA29AE22FBB4E500CFBC74 /* createDiskImage */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = createDiskImage; path = make/createDiskImage; sourceTree = ""; }; - 9DFA29B022FBB4E500CFBC74 /* head.mk */ = {isa = PBXFileReference; lastKnownFileType = text; name = head.mk; path = make/head.mk; sourceTree = ""; }; - 9DFA29B222FBB4E500CFBC74 /* launchEmulator */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = launchEmulator; path = make/launchEmulator; sourceTree = ""; }; - 9DFA29B422FBB4E500CFBC74 /* orca-asm */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = "orca-asm"; path = "make/orca-asm"; sourceTree = ""; }; - 9DFA29B622FBB4E500CFBC74 /* orca-cc */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = "orca-cc"; path = "make/orca-cc"; sourceTree = ""; }; - 9DFA29B822FBB4E500CFBC74 /* orca-rez */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = "orca-rez"; path = "make/orca-rez"; sourceTree = ""; }; - 9DFA29BA22FBB4E500CFBC74 /* system601.2mg */ = {isa = PBXFileReference; lastKnownFileType = file; name = system601.2mg; path = make/system601.2mg; sourceTree = ""; }; - 9DFA29BC22FBB4E500CFBC74 /* tail.mk */ = {isa = PBXFileReference; lastKnownFileType = text; name = tail.mk; path = make/tail.mk; sourceTree = ""; }; - 9DFA29BF22FBB4E500CFBC74 /* abCalc.xcscheme */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = abCalc.xcscheme; path = abCalc.xcodeproj/xcshareddata/xcschemes/abCalc.xcscheme; sourceTree = SOURCE_ROOT; }; - 9DFA29CF22FBB50200CFBC74 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - 9DFA29D022FBB53400CFBC74 /* abCalc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCalc.h; sourceTree = ""; }; - 9DFA29D122FBB53400CFBC74 /* abCStack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCStack.c; sourceTree = ""; }; - 9DFA29D222FBB53400CFBC74 /* abCMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCMode.h; sourceTree = ""; }; - 9DFA29D322FBB53400CFBC74 /* abCStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCStack.h; sourceTree = ""; }; - 9DFA29D422FBB53400CFBC74 /* abCMode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCMode.c; sourceTree = ""; }; - 9DFA29D522FBB53500CFBC74 /* abCalc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCalc.c; sourceTree = ""; }; - 9DFA29D622FBB53500CFBC74 /* abCError.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCError.c; sourceTree = ""; }; - 9DFA29D722FBB53500CFBC74 /* abCError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCError.h; sourceTree = ""; }; - 9DFA29DD22FBB54600CFBC74 /* shell.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = shell.mk; sourceTree = ""; }; - 9DFA29DF22FBB55A00CFBC74 /* abCOpSl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpSl.c; sourceTree = ""; }; - 9DFA29E022FBB55A00CFBC74 /* abCOpDiv.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpDiv.h; sourceTree = ""; }; - 9DFA29E122FBB55A00CFBC74 /* abCOpXor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpXor.h; sourceTree = ""; }; - 9DFA29E222FBB55A00CFBC74 /* abCOpNot.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpNot.c; sourceTree = ""; }; - 9DFA29E322FBB55A00CFBC74 /* abCOpSinh.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpSinh.h; sourceTree = ""; }; - 9DFA29E422FBB55A00CFBC74 /* abCOpInv.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpInv.h; sourceTree = ""; }; - 9DFA29E522FBB55A00CFBC74 /* abCOpTan.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpTan.c; sourceTree = ""; }; - 9DFA29E622FBB55A00CFBC74 /* abCOpBin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpBin.h; sourceTree = ""; }; - 9DFA29E722FBB55A00CFBC74 /* abCOpStws.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpStws.c; sourceTree = ""; }; - 9DFA29E822FBB55A00CFBC74 /* abCOpRr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpRr.h; sourceTree = ""; }; - 9DFA29E922FBB55A00CFBC74 /* abCOpSwap.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpSwap.c; sourceTree = ""; }; - 9DFA29EA22FBB55A00CFBC74 /* abCOpOct.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpOct.h; sourceTree = ""; }; - 9DFA29EB22FBB55A00CFBC74 /* abCOpAlog.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpAlog.c; sourceTree = ""; }; - 9DFA29EC22FBB55A00CFBC74 /* abCOpSr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpSr.h; sourceTree = ""; }; - 9DFA29ED22FBB55A00CFBC74 /* abCOpDrop.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpDrop.h; sourceTree = ""; }; - 9DFA29EE22FBB55A00CFBC74 /* abCOpB2R.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpB2R.c; sourceTree = ""; }; - 9DFA29EF22FBB55A00CFBC74 /* abCOpRcws.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpRcws.c; sourceTree = ""; }; - 9DFA29F022FBB55A00CFBC74 /* abCOpPower.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpPower.h; sourceTree = ""; }; - 9DFA29F122FBB55A00CFBC74 /* abCOpSin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpSin.h; sourceTree = ""; }; - 9DFA29F222FBB55A00CFBC74 /* abCOpRl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpRl.c; sourceTree = ""; }; - 9DFA29F322FBB55A00CFBC74 /* abCOpCos.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpCos.h; sourceTree = ""; }; - 9DFA29F422FBB55A00CFBC74 /* abCOpExp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpExp.h; sourceTree = ""; }; - 9DFA29F522FBB55A00CFBC74 /* abCOpAdd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpAdd.c; sourceTree = ""; }; - 9DFA29F622FBB55A00CFBC74 /* abCOpR2B.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpR2B.h; sourceTree = ""; }; - 9DFA29F722FBB55A00CFBC74 /* abCOpOr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpOr.h; sourceTree = ""; }; - 9DFA29F822FBB55A00CFBC74 /* abCOpPi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpPi.c; sourceTree = ""; }; - 9DFA29F922FBB55A00CFBC74 /* abCOpClear.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpClear.h; sourceTree = ""; }; - 9DFA29FA22FBB55A00CFBC74 /* abCOpSubtr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpSubtr.h; sourceTree = ""; }; - 9DFA29FB22FBB55A00CFBC74 /* abCOpTanh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpTanh.c; sourceTree = ""; }; - 9DFA29FC22FBB55A00CFBC74 /* abCOp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOp.h; sourceTree = ""; }; - 9DFA29FD22FBB55A00CFBC74 /* abCOpCosh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpCosh.c; sourceTree = ""; }; - 9DFA29FE22FBB55A00CFBC74 /* abCOpAtan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpAtan.h; sourceTree = ""; }; - 9DFA29FF22FBB55A00CFBC74 /* abCOpMult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpMult.h; sourceTree = ""; }; - 9DFA2A0022FBB55A00CFBC74 /* abCOpSqrt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpSqrt.c; sourceTree = ""; }; - 9DFA2A0122FBB55A00CFBC74 /* abCOpChs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpChs.c; sourceTree = ""; }; - 9DFA2A0222FBB55A00CFBC74 /* abCOpAsin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpAsin.c; sourceTree = ""; }; - 9DFA2A0322FBB55A00CFBC74 /* abCOpDec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpDec.c; sourceTree = ""; }; - 9DFA2A0422FBB55A00CFBC74 /* abCOpAsr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpAsr.c; sourceTree = ""; }; - 9DFA2A0522FBB55A00CFBC74 /* abCOpHex.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpHex.h; sourceTree = ""; }; - 9DFA2A0622FBB55A00CFBC74 /* abCOpSq.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpSq.h; sourceTree = ""; }; - 9DFA2A0722FBB55A00CFBC74 /* abCOpLog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpLog.h; sourceTree = ""; }; - 9DFA2A0822FBB55A00CFBC74 /* abCOpLn.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpLn.c; sourceTree = ""; }; - 9DFA2A0922FBB55A00CFBC74 /* abCOpAnd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpAnd.c; sourceTree = ""; }; - 9DFA2A0A22FBB55A00CFBC74 /* abCOpAcos.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpAcos.c; sourceTree = ""; }; - 9DFA2A0B22FBB55A00CFBC74 /* abCOpOct.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpOct.c; sourceTree = ""; }; - 9DFA2A0C22FBB55A00CFBC74 /* abCOpSwap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpSwap.h; sourceTree = ""; }; - 9DFA2A0D22FBB55A00CFBC74 /* abCOpRr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpRr.c; sourceTree = ""; }; - 9DFA2A0E22FBB55A00CFBC74 /* abCOpStws.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpStws.h; sourceTree = ""; }; - 9DFA2A0F22FBB55A00CFBC74 /* abCOpInv.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpInv.c; sourceTree = ""; }; - 9DFA2A1022FBB55A00CFBC74 /* abCOpTan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpTan.h; sourceTree = ""; }; - 9DFA2A1122FBB55A00CFBC74 /* abCOpBin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpBin.c; sourceTree = ""; }; - 9DFA2A1222FBB55A00CFBC74 /* abCOpXor.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpXor.c; sourceTree = ""; }; - 9DFA2A1322FBB55A00CFBC74 /* abCOpDiv.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpDiv.c; sourceTree = ""; }; - 9DFA2A1422FBB55A00CFBC74 /* abCOpSl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpSl.h; sourceTree = ""; }; - 9DFA2A1522FBB55A00CFBC74 /* abCOpSinh.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpSinh.c; sourceTree = ""; }; - 9DFA2A1622FBB55A00CFBC74 /* abCOpNot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpNot.h; sourceTree = ""; }; - 9DFA2A1722FBB55A00CFBC74 /* abCOpPi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpPi.h; sourceTree = ""; }; - 9DFA2A1822FBB55A00CFBC74 /* abCOpClear.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpClear.c; sourceTree = ""; }; - 9DFA2A1922FBB55A00CFBC74 /* abCOpOr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpOr.c; sourceTree = ""; }; - 9DFA2A1A22FBB55A00CFBC74 /* abCOpR2B.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpR2B.c; sourceTree = ""; }; - 9DFA2A1B22FBB55A00CFBC74 /* abCOpCosh.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpCosh.h; sourceTree = ""; }; - 9DFA2A1C22FBB55A00CFBC74 /* abCOp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOp.c; sourceTree = ""; }; - 9DFA2A1D22FBB55A00CFBC74 /* abCOpTanh.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpTanh.h; sourceTree = ""; }; - 9DFA2A1E22FBB55A00CFBC74 /* abCOpSubtr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpSubtr.c; sourceTree = ""; }; - 9DFA2A1F22FBB55A00CFBC74 /* abCOpRl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpRl.h; sourceTree = ""; }; - 9DFA2A2022FBB55A00CFBC74 /* abCOpExp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpExp.c; sourceTree = ""; }; - 9DFA2A2122FBB55A00CFBC74 /* abCOpAdd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpAdd.h; sourceTree = ""; }; - 9DFA2A2222FBB55A00CFBC74 /* abCOpCos.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpCos.c; sourceTree = ""; }; - 9DFA2A2322FBB55A00CFBC74 /* abCOpRcws.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpRcws.h; sourceTree = ""; }; - 9DFA2A2422FBB55A00CFBC74 /* abCOpB2R.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpB2R.h; sourceTree = ""; }; - 9DFA2A2522FBB55A00CFBC74 /* abCOpDrop.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpDrop.c; sourceTree = ""; }; - 9DFA2A2622FBB55A00CFBC74 /* abCOpSin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpSin.c; sourceTree = ""; }; - 9DFA2A2722FBB55A00CFBC74 /* abCOpPower.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpPower.c; sourceTree = ""; }; - 9DFA2A2822FBB55A00CFBC74 /* abCOpAlog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpAlog.h; sourceTree = ""; }; - 9DFA2A2922FBB55A00CFBC74 /* abCOpSr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpSr.c; sourceTree = ""; }; - 9DFA2A2A22FBB55A00CFBC74 /* abCOpChs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpChs.h; sourceTree = ""; }; - 9DFA2A2B22FBB55A00CFBC74 /* abCOpSqrt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpSqrt.h; sourceTree = ""; }; - 9DFA2A2C22FBB55A00CFBC74 /* abCOpMult.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpMult.c; sourceTree = ""; }; - 9DFA2A2D22FBB55A00CFBC74 /* abCOpAtan.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpAtan.c; sourceTree = ""; }; - 9DFA2A2E22FBB55A00CFBC74 /* abCOpAcos.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpAcos.h; sourceTree = ""; }; - 9DFA2A2F22FBB55A00CFBC74 /* abCOpAnd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpAnd.h; sourceTree = ""; }; - 9DFA2A3022FBB55A00CFBC74 /* abCOpLn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpLn.h; sourceTree = ""; }; - 9DFA2A3122FBB55A00CFBC74 /* abCOpAsr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpAsr.h; sourceTree = ""; }; - 9DFA2A3222FBB55A00CFBC74 /* abCOpLog.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpLog.c; sourceTree = ""; }; - 9DFA2A3322FBB55A00CFBC74 /* abCOpSq.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpSq.c; sourceTree = ""; }; - 9DFA2A3422FBB55A00CFBC74 /* abCOpHex.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCOpHex.c; sourceTree = ""; }; - 9DFA2A3522FBB55A00CFBC74 /* abCOpDec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpDec.h; sourceTree = ""; }; - 9DFA2A3622FBB55A00CFBC74 /* abCOpAsin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCOpAsin.h; sourceTree = ""; }; - 9DFA2A3822FBB55A00CFBC74 /* abCalcHelp */ = {isa = PBXFileReference; lastKnownFileType = text; path = abCalcHelp; sourceTree = ""; }; - 9DFA2A4522FBB55A00CFBC74 /* abCMain.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCMain.c; sourceTree = ""; }; - 9DFA2A4722FBB55B00CFBC74 /* abCExpReal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCExpReal.h; sourceTree = ""; }; - 9DFA2A4822FBB55B00CFBC74 /* abCExprInt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCExprInt.c; sourceTree = ""; }; - 9DFA2A4922FBB55B00CFBC74 /* abCExpr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCExpr.h; sourceTree = ""; }; - 9DFA2A4A22FBB55B00CFBC74 /* abCExpReal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCExpReal.c; sourceTree = ""; }; - 9DFA2A4B22FBB55B00CFBC74 /* abCExprInt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCExprInt.h; sourceTree = ""; }; - 9DFA2A4C22FBB55B00CFBC74 /* abCExpr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCExpr.c; sourceTree = ""; }; - 9DFA2A4E22FBB55C00CFBC74 /* abCalc.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = abCalc.png; sourceTree = ""; }; - 9DFA2A4F22FBB55C00CFBC74 /* abCalcNDA.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = abCalcNDA.png; sourceTree = ""; }; - 9DFA2A5122FBB55C00CFBC74 /* abCalcNDA.rez */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.rez; path = abCalcNDA.rez; sourceTree = ""; }; - 9DFA2A5222FBB55C00CFBC74 /* abCalcNDA.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = abCalcNDA.c; sourceTree = ""; }; - 9DFA2A5322FBB55C00CFBC74 /* abCalcNDA.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = abCalcNDA.h; sourceTree = ""; }; - 9DFA2A5422FBB67A00CFBC74 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + 9DBFA59F2694E5DB00B9C5E0 /* abCalc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = abCalc; sourceTree = BUILT_PRODUCTS_DIR; }; + 9DBFA5A22694E5DB00B9C5E0 /* abCalc.2mg */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = abCalc.2mg; sourceTree = BUILT_PRODUCTS_DIR; }; + 9DBFA5A42694E5DB00B9C5E0 /* abCalc.shk */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = abCalc.shk; sourceTree = BUILT_PRODUCTS_DIR; }; + 9DBFA5A92694E5DB00B9C5E0 /* doNotBuild */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = doNotBuild; sourceTree = BUILT_PRODUCTS_DIR; }; + 9DBFA5B02694E5DB00B9C5E0 /* nda.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = nda.mk; sourceTree = ""; }; + 9DBFA5B32694E5DB00B9C5E0 /* config.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = config.txt; sourceTree = ""; }; + 9DBFA5B52694E5DB00B9C5E0 /* createDiskImage */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = createDiskImage; sourceTree = ""; }; + 9DBFA5B72694E5DB00B9C5E0 /* head.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = head.mk; sourceTree = ""; }; + 9DBFA5B92694E5DB00B9C5E0 /* launchEmulator */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = launchEmulator; sourceTree = ""; }; + 9DBFA5BB2694E5DB00B9C5E0 /* md2teach */ = {isa = PBXFileReference; lastKnownFileType = file; path = md2teach; sourceTree = ""; }; + 9DBFA5BD2694E5DB00B9C5E0 /* orca-asm */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "orca-asm"; sourceTree = ""; }; + 9DBFA5BF2694E5DB00B9C5E0 /* orca-cc */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "orca-cc"; sourceTree = ""; }; + 9DBFA5C12694E5DB00B9C5E0 /* orca-rez */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "orca-rez"; sourceTree = ""; }; + 9DBFA5C32694E5DB00B9C5E0 /* system601.2mg */ = {isa = PBXFileReference; lastKnownFileType = file; path = system601.2mg; sourceTree = ""; }; + 9DBFA5C52694E5DB00B9C5E0 /* empty.2mg */ = {isa = PBXFileReference; lastKnownFileType = file; path = empty.2mg; sourceTree = ""; }; + 9DBFA5C72694E5DB00B9C5E0 /* tar */ = {isa = PBXFileReference; lastKnownFileType = file; path = tar; sourceTree = ""; }; + 9DBFA5C92694E5DB00B9C5E0 /* tail.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = tail.mk; sourceTree = ""; }; + 9DBFA5CC2694E5DB00B9C5E0 /* abCalc.xcscheme */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = abCalc.xcscheme; path = ../../abCalc.xcodeproj/xcshareddata/xcschemes/abCalc.xcscheme; sourceTree = ""; }; + 9DBFA5EA2694E5FF00B9C5E0 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 9DBFA5EB2694E5FF00B9C5E0 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 9DBFA5F42694E64E00B9C5E0 /* shell.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = shell.mk; sourceTree = ""; }; + 9DBFA5FA2694E66A00B9C5E0 /* abCalcNDA.rez */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; path = abCalcNDA.rez; sourceTree = ""; }; + 9DBFA5FB2694E66A00B9C5E0 /* abCalcNDA.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCalcNDA.c; sourceTree = ""; }; + 9DBFA5FC2694E66A00B9C5E0 /* abCalcNDA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCalcNDA.h; sourceTree = ""; }; + 9DBFA5FD2694E66A00B9C5E0 /* abCStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCStack.h; sourceTree = ""; }; + 9DBFA5FF2694E66A00B9C5E0 /* abCalcHelp.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = abCalcHelp.md; sourceTree = ""; }; + 9DBFA6002694E66A00B9C5E0 /* abCError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCError.h; sourceTree = ""; }; + 9DBFA6022694E66A00B9C5E0 /* abCOpSl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpSl.c; sourceTree = ""; }; + 9DBFA6032694E66A00B9C5E0 /* abCOpDiv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpDiv.h; sourceTree = ""; }; + 9DBFA6042694E66A00B9C5E0 /* abCOpXor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpXor.h; sourceTree = ""; }; + 9DBFA6052694E66A00B9C5E0 /* abCOpNot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpNot.c; sourceTree = ""; }; + 9DBFA6062694E66A00B9C5E0 /* abCOpSinh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpSinh.h; sourceTree = ""; }; + 9DBFA6072694E66A00B9C5E0 /* abCOpInv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpInv.h; sourceTree = ""; }; + 9DBFA6082694E66A00B9C5E0 /* abCOpTan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpTan.c; sourceTree = ""; }; + 9DBFA6092694E66A00B9C5E0 /* abCOpBin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpBin.h; sourceTree = ""; }; + 9DBFA60A2694E66A00B9C5E0 /* abCOpStws.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpStws.c; sourceTree = ""; }; + 9DBFA60B2694E66A00B9C5E0 /* abCOpRr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpRr.h; sourceTree = ""; }; + 9DBFA60C2694E66A00B9C5E0 /* abCOpSwap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpSwap.c; sourceTree = ""; }; + 9DBFA60D2694E66A00B9C5E0 /* abCOpOct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpOct.h; sourceTree = ""; }; + 9DBFA60E2694E66A00B9C5E0 /* abCOpAlog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpAlog.c; sourceTree = ""; }; + 9DBFA60F2694E66A00B9C5E0 /* abCOpSr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpSr.h; sourceTree = ""; }; + 9DBFA6102694E66A00B9C5E0 /* abCOpDrop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpDrop.h; sourceTree = ""; }; + 9DBFA6112694E66A00B9C5E0 /* abCOpB2R.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpB2R.c; sourceTree = ""; }; + 9DBFA6122694E66A00B9C5E0 /* abCOpRcws.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpRcws.c; sourceTree = ""; }; + 9DBFA6132694E66A00B9C5E0 /* abCOpPower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpPower.h; sourceTree = ""; }; + 9DBFA6142694E66A00B9C5E0 /* abCOpSin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpSin.h; sourceTree = ""; }; + 9DBFA6152694E66A00B9C5E0 /* abCOpRl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpRl.c; sourceTree = ""; }; + 9DBFA6162694E66A00B9C5E0 /* abCOpCos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpCos.h; sourceTree = ""; }; + 9DBFA6172694E66A00B9C5E0 /* abCOpExp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpExp.h; sourceTree = ""; }; + 9DBFA6182694E66A00B9C5E0 /* abCOpAdd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpAdd.c; sourceTree = ""; }; + 9DBFA6192694E66A00B9C5E0 /* abCOpR2B.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpR2B.h; sourceTree = ""; }; + 9DBFA61A2694E66A00B9C5E0 /* abCOpOr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpOr.h; sourceTree = ""; }; + 9DBFA61B2694E66A00B9C5E0 /* abCOpPi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpPi.c; sourceTree = ""; }; + 9DBFA61C2694E66A00B9C5E0 /* abCOpClear.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpClear.h; sourceTree = ""; }; + 9DBFA61D2694E66A00B9C5E0 /* abCOpSubtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpSubtr.h; sourceTree = ""; }; + 9DBFA61E2694E66A00B9C5E0 /* abCOpTanh.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpTanh.c; sourceTree = ""; }; + 9DBFA61F2694E66A00B9C5E0 /* abCOp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOp.h; sourceTree = ""; }; + 9DBFA6202694E66A00B9C5E0 /* abCOpCosh.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpCosh.c; sourceTree = ""; }; + 9DBFA6212694E66A00B9C5E0 /* abCOpAtan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpAtan.h; sourceTree = ""; }; + 9DBFA6222694E66A00B9C5E0 /* abCOpMult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpMult.h; sourceTree = ""; }; + 9DBFA6232694E66A00B9C5E0 /* abCOpSqrt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpSqrt.c; sourceTree = ""; }; + 9DBFA6242694E66A00B9C5E0 /* abCOpChs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpChs.c; sourceTree = ""; }; + 9DBFA6252694E66A00B9C5E0 /* abCOpAsin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpAsin.c; sourceTree = ""; }; + 9DBFA6262694E66A00B9C5E0 /* abCOpDec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpDec.c; sourceTree = ""; }; + 9DBFA6272694E66A00B9C5E0 /* abCOpAsr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpAsr.c; sourceTree = ""; }; + 9DBFA6282694E66A00B9C5E0 /* abCOpHex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpHex.h; sourceTree = ""; }; + 9DBFA6292694E66A00B9C5E0 /* abCOpSq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpSq.h; sourceTree = ""; }; + 9DBFA62A2694E66A00B9C5E0 /* abCOpLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpLog.h; sourceTree = ""; }; + 9DBFA62B2694E66A00B9C5E0 /* abCOpLn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpLn.c; sourceTree = ""; }; + 9DBFA62C2694E66A00B9C5E0 /* abCOpAnd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpAnd.c; sourceTree = ""; }; + 9DBFA62D2694E66A00B9C5E0 /* abCOpAcos.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpAcos.c; sourceTree = ""; }; + 9DBFA62E2694E66A00B9C5E0 /* abCOpOct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpOct.c; sourceTree = ""; }; + 9DBFA62F2694E66A00B9C5E0 /* abCOpSwap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpSwap.h; sourceTree = ""; }; + 9DBFA6302694E66A00B9C5E0 /* abCOpRr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpRr.c; sourceTree = ""; }; + 9DBFA6312694E66A00B9C5E0 /* abCOpStws.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpStws.h; sourceTree = ""; }; + 9DBFA6322694E66A00B9C5E0 /* abCOpInv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpInv.c; sourceTree = ""; }; + 9DBFA6332694E66A00B9C5E0 /* abCOpTan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpTan.h; sourceTree = ""; }; + 9DBFA6342694E66A00B9C5E0 /* abCOpBin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpBin.c; sourceTree = ""; }; + 9DBFA6352694E66A00B9C5E0 /* abCOpXor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpXor.c; sourceTree = ""; }; + 9DBFA6362694E66A00B9C5E0 /* abCOpDiv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpDiv.c; sourceTree = ""; }; + 9DBFA6372694E66A00B9C5E0 /* abCOpSl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpSl.h; sourceTree = ""; }; + 9DBFA6382694E66A00B9C5E0 /* abCOpSinh.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpSinh.c; sourceTree = ""; }; + 9DBFA6392694E66A00B9C5E0 /* abCOpNot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpNot.h; sourceTree = ""; }; + 9DBFA63A2694E66A00B9C5E0 /* abCOpPi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpPi.h; sourceTree = ""; }; + 9DBFA63B2694E66A00B9C5E0 /* abCOpClear.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpClear.c; sourceTree = ""; }; + 9DBFA63C2694E66A00B9C5E0 /* abCOpOr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpOr.c; sourceTree = ""; }; + 9DBFA63D2694E66A00B9C5E0 /* abCOpR2B.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpR2B.c; sourceTree = ""; }; + 9DBFA63E2694E66A00B9C5E0 /* abCOpCosh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpCosh.h; sourceTree = ""; }; + 9DBFA63F2694E66A00B9C5E0 /* abCOp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOp.c; sourceTree = ""; }; + 9DBFA6402694E66A00B9C5E0 /* abCOpTanh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpTanh.h; sourceTree = ""; }; + 9DBFA6412694E66A00B9C5E0 /* abCOpSubtr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpSubtr.c; sourceTree = ""; }; + 9DBFA6422694E66A00B9C5E0 /* abCOpRl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpRl.h; sourceTree = ""; }; + 9DBFA6432694E66A00B9C5E0 /* abCOpExp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpExp.c; sourceTree = ""; }; + 9DBFA6442694E66A00B9C5E0 /* abCOpAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpAdd.h; sourceTree = ""; }; + 9DBFA6452694E66A00B9C5E0 /* abCOpCos.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpCos.c; sourceTree = ""; }; + 9DBFA6462694E66A00B9C5E0 /* abCOpRcws.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpRcws.h; sourceTree = ""; }; + 9DBFA6472694E66A00B9C5E0 /* abCOpB2R.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpB2R.h; sourceTree = ""; }; + 9DBFA6482694E66A00B9C5E0 /* abCOpDrop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpDrop.c; sourceTree = ""; }; + 9DBFA6492694E66A00B9C5E0 /* abCOpSin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpSin.c; sourceTree = ""; }; + 9DBFA64A2694E66A00B9C5E0 /* abCOpPower.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpPower.c; sourceTree = ""; }; + 9DBFA64B2694E66A00B9C5E0 /* abCOpAlog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpAlog.h; sourceTree = ""; }; + 9DBFA64C2694E66A00B9C5E0 /* abCOpSr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpSr.c; sourceTree = ""; }; + 9DBFA64D2694E66A00B9C5E0 /* abCOpChs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpChs.h; sourceTree = ""; }; + 9DBFA64E2694E66A00B9C5E0 /* abCOpSqrt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpSqrt.h; sourceTree = ""; }; + 9DBFA64F2694E66A00B9C5E0 /* abCOpMult.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpMult.c; sourceTree = ""; }; + 9DBFA6502694E66A00B9C5E0 /* abCOpAtan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpAtan.c; sourceTree = ""; }; + 9DBFA6512694E66A00B9C5E0 /* abCOpAcos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpAcos.h; sourceTree = ""; }; + 9DBFA6522694E66A00B9C5E0 /* abCOpAnd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpAnd.h; sourceTree = ""; }; + 9DBFA6532694E66A00B9C5E0 /* abCOpLn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpLn.h; sourceTree = ""; }; + 9DBFA6542694E66A00B9C5E0 /* abCOpAsr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpAsr.h; sourceTree = ""; }; + 9DBFA6552694E66A00B9C5E0 /* abCOpLog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpLog.c; sourceTree = ""; }; + 9DBFA6562694E66A00B9C5E0 /* abCOpSq.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpSq.c; sourceTree = ""; }; + 9DBFA6572694E66A00B9C5E0 /* abCOpHex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCOpHex.c; sourceTree = ""; }; + 9DBFA6582694E66A00B9C5E0 /* abCOpDec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpDec.h; sourceTree = ""; }; + 9DBFA6592694E66A00B9C5E0 /* abCOpAsin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCOpAsin.h; sourceTree = ""; }; + 9DBFA65A2694E66A00B9C5E0 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + 9DBFA65C2694E66A00B9C5E0 /* abCMain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCMain.c; sourceTree = ""; }; + 9DBFA65E2694E66A00B9C5E0 /* abCExpReal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCExpReal.h; sourceTree = ""; }; + 9DBFA65F2694E66A00B9C5E0 /* abCExprInt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCExprInt.c; sourceTree = ""; }; + 9DBFA6602694E66A00B9C5E0 /* abCExpr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCExpr.h; sourceTree = ""; }; + 9DBFA6612694E66A00B9C5E0 /* abCExpReal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCExpReal.c; sourceTree = ""; }; + 9DBFA6622694E66A00B9C5E0 /* abCExprInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCExprInt.h; sourceTree = ""; }; + 9DBFA6632694E66A00B9C5E0 /* abCExpr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCExpr.c; sourceTree = ""; }; + 9DBFA6642694E66A00B9C5E0 /* abCalc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCalc.h; sourceTree = ""; }; + 9DBFA6652694E66A00B9C5E0 /* abCMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abCMode.h; sourceTree = ""; }; + 9DBFA6662694E66A00B9C5E0 /* abCalc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCalc.c; sourceTree = ""; }; + 9DBFA6672694E66A00B9C5E0 /* abCError.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCError.c; sourceTree = ""; }; + 9DBFA6682694E66A00B9C5E0 /* abCStack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCStack.c; sourceTree = ""; }; + 9DBFA66A2694E66A00B9C5E0 /* abCalc.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = abCalc.png; sourceTree = ""; }; + 9DBFA66B2694E66A00B9C5E0 /* abCalcNDA.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = abCalcNDA.png; sourceTree = ""; }; + 9DBFA66C2694E66A00B9C5E0 /* abCMode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = abCMode.c; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 9DFA299F22FBB4E500CFBC74 /* Frameworks */ = { + 9DBFA5A62694E5DB00B9C5E0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -188,226 +247,222 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 9DFA299322FBB4E500CFBC74 = { + 9DBFA5982694E5DB00B9C5E0 = { isa = PBXGroup; children = ( - 9DFA29CF22FBB50200CFBC74 /* README.md */, - 9D30A37622FBC1EA00A4DAFA /* LICENSE */, - 9DFA29A322FBB4E500CFBC74 /* abCalc */, - 9DFA299B22FBB4E500CFBC74 /* Products */, + 9DBFA5EB2694E5FF00B9C5E0 /* LICENSE */, + 9DBFA5EA2694E5FF00B9C5E0 /* README.md */, + 9DBFA5AA2694E5DB00B9C5E0 /* abCalc */, + 9DBFA5A02694E5DB00B9C5E0 /* Products */, ); sourceTree = ""; }; - 9DFA299B22FBB4E500CFBC74 /* Products */ = { + 9DBFA5A02694E5DB00B9C5E0 /* Products */ = { isa = PBXGroup; children = ( - 9DFA299A22FBB4E500CFBC74 /* abCalc */, - 9DFA299D22FBB4E500CFBC74 /* abCalc.2mg */, - 9DFA29A222FBB4E500CFBC74 /* doNotBuild */, + 9DBFA59F2694E5DB00B9C5E0 /* abCalc */, + 9DBFA5A22694E5DB00B9C5E0 /* abCalc.2mg */, + 9DBFA5A42694E5DB00B9C5E0 /* abCalc.shk */, + 9DBFA5A92694E5DB00B9C5E0 /* doNotBuild */, ); name = Products; sourceTree = ""; }; - 9DFA29A322FBB4E500CFBC74 /* abCalc */ = { + 9DBFA5AA2694E5DB00B9C5E0 /* abCalc */ = { isa = PBXGroup; children = ( - 9DFA2A3722FBB55A00CFBC74 /* copydir */, - 9DFA2A4622FBB55B00CFBC74 /* expr */, - 9DFA2A5022FBB55C00CFBC74 /* nda */, - 9DFA29DE22FBB55A00CFBC74 /* ops */, - 9DFA2A4D22FBB55C00CFBC74 /* screenshots */, - 9DFA2A4422FBB55A00CFBC74 /* shell */, - 9DFA29D522FBB53500CFBC74 /* abCalc.c */, - 9DFA29D022FBB53400CFBC74 /* abCalc.h */, - 9DFA29D622FBB53500CFBC74 /* abCError.c */, - 9DFA29D722FBB53500CFBC74 /* abCError.h */, - 9DFA29D422FBB53400CFBC74 /* abCMode.c */, - 9DFA29D222FBB53400CFBC74 /* abCMode.h */, - 9DFA29D122FBB53400CFBC74 /* abCStack.c */, - 9DFA29D322FBB53400CFBC74 /* abCStack.h */, - 9DFA2A5422FBB67A00CFBC74 /* Makefile */, - 9DFA29A922FBB4E500CFBC74 /* nda.mk */, - 9DFA29DD22FBB54600CFBC74 /* shell.mk */, - 9DFA29AB22FBB4E500CFBC74 /* make */, - 9DFA29BE22FBB4E500CFBC74 /* Supporting Files */, + 9DBFA6662694E66A00B9C5E0 /* abCalc.c */, + 9DBFA6642694E66A00B9C5E0 /* abCalc.h */, + 9DBFA6672694E66A00B9C5E0 /* abCError.c */, + 9DBFA6002694E66A00B9C5E0 /* abCError.h */, + 9DBFA66C2694E66A00B9C5E0 /* abCMode.c */, + 9DBFA6652694E66A00B9C5E0 /* abCMode.h */, + 9DBFA6682694E66A00B9C5E0 /* abCStack.c */, + 9DBFA5FD2694E66A00B9C5E0 /* abCStack.h */, + 9DBFA5FF2694E66A00B9C5E0 /* abCalcHelp.md */, + 9DBFA65D2694E66A00B9C5E0 /* expr */, + 9DBFA65A2694E66A00B9C5E0 /* Makefile */, + 9DBFA5F92694E66A00B9C5E0 /* nda */, + 9DBFA6012694E66A00B9C5E0 /* ops */, + 9DBFA6692694E66A00B9C5E0 /* screenshots */, + 9DBFA65B2694E66A00B9C5E0 /* shell */, + 9DBFA5B02694E5DB00B9C5E0 /* nda.mk */, + 9DBFA5F42694E64E00B9C5E0 /* shell.mk */, + 9DBFA5B22694E5DB00B9C5E0 /* make */, + 9DBFA5CB2694E5DB00B9C5E0 /* Supporting Files */, ); path = abCalc; sourceTree = ""; }; - 9DFA29AB22FBB4E500CFBC74 /* make */ = { + 9DBFA5B22694E5DB00B9C5E0 /* make */ = { isa = PBXGroup; children = ( - 9DFA29AC22FBB4E500CFBC74 /* config.txt */, - 9DFA29AE22FBB4E500CFBC74 /* createDiskImage */, - 9DFA29B022FBB4E500CFBC74 /* head.mk */, - 9DFA29B222FBB4E500CFBC74 /* launchEmulator */, - 9DFA29B422FBB4E500CFBC74 /* orca-asm */, - 9DFA29B622FBB4E500CFBC74 /* orca-cc */, - 9DFA29B822FBB4E500CFBC74 /* orca-rez */, - 9DFA29BA22FBB4E500CFBC74 /* system601.2mg */, - 9DFA29BC22FBB4E500CFBC74 /* tail.mk */, + 9DBFA5B32694E5DB00B9C5E0 /* config.txt */, + 9DBFA5B52694E5DB00B9C5E0 /* createDiskImage */, + 9DBFA5B72694E5DB00B9C5E0 /* head.mk */, + 9DBFA5B92694E5DB00B9C5E0 /* launchEmulator */, + 9DBFA5BB2694E5DB00B9C5E0 /* md2teach */, + 9DBFA5BD2694E5DB00B9C5E0 /* orca-asm */, + 9DBFA5BF2694E5DB00B9C5E0 /* orca-cc */, + 9DBFA5C12694E5DB00B9C5E0 /* orca-rez */, + 9DBFA5C32694E5DB00B9C5E0 /* system601.2mg */, + 9DBFA5C52694E5DB00B9C5E0 /* empty.2mg */, + 9DBFA5C72694E5DB00B9C5E0 /* tar */, + 9DBFA5C92694E5DB00B9C5E0 /* tail.mk */, ); - name = make; + path = make; sourceTree = ""; }; - 9DFA29BE22FBB4E500CFBC74 /* Supporting Files */ = { + 9DBFA5CB2694E5DB00B9C5E0 /* Supporting Files */ = { isa = PBXGroup; children = ( - 9DFA29BF22FBB4E500CFBC74 /* abCalc.xcscheme */, + 9DBFA5CC2694E5DB00B9C5E0 /* abCalc.xcscheme */, ); - name = "Supporting Files"; + path = "Supporting Files"; sourceTree = ""; }; - 9DFA29DE22FBB55A00CFBC74 /* ops */ = { + 9DBFA5F92694E66A00B9C5E0 /* nda */ = { isa = PBXGroup; children = ( - 9DFA29DF22FBB55A00CFBC74 /* abCOpSl.c */, - 9DFA29E022FBB55A00CFBC74 /* abCOpDiv.h */, - 9DFA29E122FBB55A00CFBC74 /* abCOpXor.h */, - 9DFA29E222FBB55A00CFBC74 /* abCOpNot.c */, - 9DFA29E322FBB55A00CFBC74 /* abCOpSinh.h */, - 9DFA29E422FBB55A00CFBC74 /* abCOpInv.h */, - 9DFA29E522FBB55A00CFBC74 /* abCOpTan.c */, - 9DFA29E622FBB55A00CFBC74 /* abCOpBin.h */, - 9DFA29E722FBB55A00CFBC74 /* abCOpStws.c */, - 9DFA29E822FBB55A00CFBC74 /* abCOpRr.h */, - 9DFA29E922FBB55A00CFBC74 /* abCOpSwap.c */, - 9DFA29EA22FBB55A00CFBC74 /* abCOpOct.h */, - 9DFA29EB22FBB55A00CFBC74 /* abCOpAlog.c */, - 9DFA29EC22FBB55A00CFBC74 /* abCOpSr.h */, - 9DFA29ED22FBB55A00CFBC74 /* abCOpDrop.h */, - 9DFA29EE22FBB55A00CFBC74 /* abCOpB2R.c */, - 9DFA29EF22FBB55A00CFBC74 /* abCOpRcws.c */, - 9DFA29F022FBB55A00CFBC74 /* abCOpPower.h */, - 9DFA29F122FBB55A00CFBC74 /* abCOpSin.h */, - 9DFA29F222FBB55A00CFBC74 /* abCOpRl.c */, - 9DFA29F322FBB55A00CFBC74 /* abCOpCos.h */, - 9DFA29F422FBB55A00CFBC74 /* abCOpExp.h */, - 9DFA29F522FBB55A00CFBC74 /* abCOpAdd.c */, - 9DFA29F622FBB55A00CFBC74 /* abCOpR2B.h */, - 9DFA29F722FBB55A00CFBC74 /* abCOpOr.h */, - 9DFA29F822FBB55A00CFBC74 /* abCOpPi.c */, - 9DFA29F922FBB55A00CFBC74 /* abCOpClear.h */, - 9DFA29FA22FBB55A00CFBC74 /* abCOpSubtr.h */, - 9DFA29FB22FBB55A00CFBC74 /* abCOpTanh.c */, - 9DFA29FC22FBB55A00CFBC74 /* abCOp.h */, - 9DFA29FD22FBB55A00CFBC74 /* abCOpCosh.c */, - 9DFA29FE22FBB55A00CFBC74 /* abCOpAtan.h */, - 9DFA29FF22FBB55A00CFBC74 /* abCOpMult.h */, - 9DFA2A0022FBB55A00CFBC74 /* abCOpSqrt.c */, - 9DFA2A0122FBB55A00CFBC74 /* abCOpChs.c */, - 9DFA2A0222FBB55A00CFBC74 /* abCOpAsin.c */, - 9DFA2A0322FBB55A00CFBC74 /* abCOpDec.c */, - 9DFA2A0422FBB55A00CFBC74 /* abCOpAsr.c */, - 9DFA2A0522FBB55A00CFBC74 /* abCOpHex.h */, - 9DFA2A0622FBB55A00CFBC74 /* abCOpSq.h */, - 9DFA2A0722FBB55A00CFBC74 /* abCOpLog.h */, - 9DFA2A0822FBB55A00CFBC74 /* abCOpLn.c */, - 9DFA2A0922FBB55A00CFBC74 /* abCOpAnd.c */, - 9DFA2A0A22FBB55A00CFBC74 /* abCOpAcos.c */, - 9DFA2A0B22FBB55A00CFBC74 /* abCOpOct.c */, - 9DFA2A0C22FBB55A00CFBC74 /* abCOpSwap.h */, - 9DFA2A0D22FBB55A00CFBC74 /* abCOpRr.c */, - 9DFA2A0E22FBB55A00CFBC74 /* abCOpStws.h */, - 9DFA2A0F22FBB55A00CFBC74 /* abCOpInv.c */, - 9DFA2A1022FBB55A00CFBC74 /* abCOpTan.h */, - 9DFA2A1122FBB55A00CFBC74 /* abCOpBin.c */, - 9DFA2A1222FBB55A00CFBC74 /* abCOpXor.c */, - 9DFA2A1322FBB55A00CFBC74 /* abCOpDiv.c */, - 9DFA2A1422FBB55A00CFBC74 /* abCOpSl.h */, - 9DFA2A1522FBB55A00CFBC74 /* abCOpSinh.c */, - 9DFA2A1622FBB55A00CFBC74 /* abCOpNot.h */, - 9DFA2A1722FBB55A00CFBC74 /* abCOpPi.h */, - 9DFA2A1822FBB55A00CFBC74 /* abCOpClear.c */, - 9DFA2A1922FBB55A00CFBC74 /* abCOpOr.c */, - 9DFA2A1A22FBB55A00CFBC74 /* abCOpR2B.c */, - 9DFA2A1B22FBB55A00CFBC74 /* abCOpCosh.h */, - 9DFA2A1C22FBB55A00CFBC74 /* abCOp.c */, - 9DFA2A1D22FBB55A00CFBC74 /* abCOpTanh.h */, - 9DFA2A1E22FBB55A00CFBC74 /* abCOpSubtr.c */, - 9DFA2A1F22FBB55A00CFBC74 /* abCOpRl.h */, - 9DFA2A2022FBB55A00CFBC74 /* abCOpExp.c */, - 9DFA2A2122FBB55A00CFBC74 /* abCOpAdd.h */, - 9DFA2A2222FBB55A00CFBC74 /* abCOpCos.c */, - 9DFA2A2322FBB55A00CFBC74 /* abCOpRcws.h */, - 9DFA2A2422FBB55A00CFBC74 /* abCOpB2R.h */, - 9DFA2A2522FBB55A00CFBC74 /* abCOpDrop.c */, - 9DFA2A2622FBB55A00CFBC74 /* abCOpSin.c */, - 9DFA2A2722FBB55A00CFBC74 /* abCOpPower.c */, - 9DFA2A2822FBB55A00CFBC74 /* abCOpAlog.h */, - 9DFA2A2922FBB55A00CFBC74 /* abCOpSr.c */, - 9DFA2A2A22FBB55A00CFBC74 /* abCOpChs.h */, - 9DFA2A2B22FBB55A00CFBC74 /* abCOpSqrt.h */, - 9DFA2A2C22FBB55A00CFBC74 /* abCOpMult.c */, - 9DFA2A2D22FBB55A00CFBC74 /* abCOpAtan.c */, - 9DFA2A2E22FBB55A00CFBC74 /* abCOpAcos.h */, - 9DFA2A2F22FBB55A00CFBC74 /* abCOpAnd.h */, - 9DFA2A3022FBB55A00CFBC74 /* abCOpLn.h */, - 9DFA2A3122FBB55A00CFBC74 /* abCOpAsr.h */, - 9DFA2A3222FBB55A00CFBC74 /* abCOpLog.c */, - 9DFA2A3322FBB55A00CFBC74 /* abCOpSq.c */, - 9DFA2A3422FBB55A00CFBC74 /* abCOpHex.c */, - 9DFA2A3522FBB55A00CFBC74 /* abCOpDec.h */, - 9DFA2A3622FBB55A00CFBC74 /* abCOpAsin.h */, + 9DBFA5FA2694E66A00B9C5E0 /* abCalcNDA.rez */, + 9DBFA5FB2694E66A00B9C5E0 /* abCalcNDA.c */, + 9DBFA5FC2694E66A00B9C5E0 /* abCalcNDA.h */, + ); + path = nda; + sourceTree = ""; + }; + 9DBFA6012694E66A00B9C5E0 /* ops */ = { + isa = PBXGroup; + children = ( + 9DBFA6022694E66A00B9C5E0 /* abCOpSl.c */, + 9DBFA6032694E66A00B9C5E0 /* abCOpDiv.h */, + 9DBFA6042694E66A00B9C5E0 /* abCOpXor.h */, + 9DBFA6052694E66A00B9C5E0 /* abCOpNot.c */, + 9DBFA6062694E66A00B9C5E0 /* abCOpSinh.h */, + 9DBFA6072694E66A00B9C5E0 /* abCOpInv.h */, + 9DBFA6082694E66A00B9C5E0 /* abCOpTan.c */, + 9DBFA6092694E66A00B9C5E0 /* abCOpBin.h */, + 9DBFA60A2694E66A00B9C5E0 /* abCOpStws.c */, + 9DBFA60B2694E66A00B9C5E0 /* abCOpRr.h */, + 9DBFA60C2694E66A00B9C5E0 /* abCOpSwap.c */, + 9DBFA60D2694E66A00B9C5E0 /* abCOpOct.h */, + 9DBFA60E2694E66A00B9C5E0 /* abCOpAlog.c */, + 9DBFA60F2694E66A00B9C5E0 /* abCOpSr.h */, + 9DBFA6102694E66A00B9C5E0 /* abCOpDrop.h */, + 9DBFA6112694E66A00B9C5E0 /* abCOpB2R.c */, + 9DBFA6122694E66A00B9C5E0 /* abCOpRcws.c */, + 9DBFA6132694E66A00B9C5E0 /* abCOpPower.h */, + 9DBFA6142694E66A00B9C5E0 /* abCOpSin.h */, + 9DBFA6152694E66A00B9C5E0 /* abCOpRl.c */, + 9DBFA6162694E66A00B9C5E0 /* abCOpCos.h */, + 9DBFA6172694E66A00B9C5E0 /* abCOpExp.h */, + 9DBFA6182694E66A00B9C5E0 /* abCOpAdd.c */, + 9DBFA6192694E66A00B9C5E0 /* abCOpR2B.h */, + 9DBFA61A2694E66A00B9C5E0 /* abCOpOr.h */, + 9DBFA61B2694E66A00B9C5E0 /* abCOpPi.c */, + 9DBFA61C2694E66A00B9C5E0 /* abCOpClear.h */, + 9DBFA61D2694E66A00B9C5E0 /* abCOpSubtr.h */, + 9DBFA61E2694E66A00B9C5E0 /* abCOpTanh.c */, + 9DBFA61F2694E66A00B9C5E0 /* abCOp.h */, + 9DBFA6202694E66A00B9C5E0 /* abCOpCosh.c */, + 9DBFA6212694E66A00B9C5E0 /* abCOpAtan.h */, + 9DBFA6222694E66A00B9C5E0 /* abCOpMult.h */, + 9DBFA6232694E66A00B9C5E0 /* abCOpSqrt.c */, + 9DBFA6242694E66A00B9C5E0 /* abCOpChs.c */, + 9DBFA6252694E66A00B9C5E0 /* abCOpAsin.c */, + 9DBFA6262694E66A00B9C5E0 /* abCOpDec.c */, + 9DBFA6272694E66A00B9C5E0 /* abCOpAsr.c */, + 9DBFA6282694E66A00B9C5E0 /* abCOpHex.h */, + 9DBFA6292694E66A00B9C5E0 /* abCOpSq.h */, + 9DBFA62A2694E66A00B9C5E0 /* abCOpLog.h */, + 9DBFA62B2694E66A00B9C5E0 /* abCOpLn.c */, + 9DBFA62C2694E66A00B9C5E0 /* abCOpAnd.c */, + 9DBFA62D2694E66A00B9C5E0 /* abCOpAcos.c */, + 9DBFA62E2694E66A00B9C5E0 /* abCOpOct.c */, + 9DBFA62F2694E66A00B9C5E0 /* abCOpSwap.h */, + 9DBFA6302694E66A00B9C5E0 /* abCOpRr.c */, + 9DBFA6312694E66A00B9C5E0 /* abCOpStws.h */, + 9DBFA6322694E66A00B9C5E0 /* abCOpInv.c */, + 9DBFA6332694E66A00B9C5E0 /* abCOpTan.h */, + 9DBFA6342694E66A00B9C5E0 /* abCOpBin.c */, + 9DBFA6352694E66A00B9C5E0 /* abCOpXor.c */, + 9DBFA6362694E66A00B9C5E0 /* abCOpDiv.c */, + 9DBFA6372694E66A00B9C5E0 /* abCOpSl.h */, + 9DBFA6382694E66A00B9C5E0 /* abCOpSinh.c */, + 9DBFA6392694E66A00B9C5E0 /* abCOpNot.h */, + 9DBFA63A2694E66A00B9C5E0 /* abCOpPi.h */, + 9DBFA63B2694E66A00B9C5E0 /* abCOpClear.c */, + 9DBFA63C2694E66A00B9C5E0 /* abCOpOr.c */, + 9DBFA63D2694E66A00B9C5E0 /* abCOpR2B.c */, + 9DBFA63E2694E66A00B9C5E0 /* abCOpCosh.h */, + 9DBFA63F2694E66A00B9C5E0 /* abCOp.c */, + 9DBFA6402694E66A00B9C5E0 /* abCOpTanh.h */, + 9DBFA6412694E66A00B9C5E0 /* abCOpSubtr.c */, + 9DBFA6422694E66A00B9C5E0 /* abCOpRl.h */, + 9DBFA6432694E66A00B9C5E0 /* abCOpExp.c */, + 9DBFA6442694E66A00B9C5E0 /* abCOpAdd.h */, + 9DBFA6452694E66A00B9C5E0 /* abCOpCos.c */, + 9DBFA6462694E66A00B9C5E0 /* abCOpRcws.h */, + 9DBFA6472694E66A00B9C5E0 /* abCOpB2R.h */, + 9DBFA6482694E66A00B9C5E0 /* abCOpDrop.c */, + 9DBFA6492694E66A00B9C5E0 /* abCOpSin.c */, + 9DBFA64A2694E66A00B9C5E0 /* abCOpPower.c */, + 9DBFA64B2694E66A00B9C5E0 /* abCOpAlog.h */, + 9DBFA64C2694E66A00B9C5E0 /* abCOpSr.c */, + 9DBFA64D2694E66A00B9C5E0 /* abCOpChs.h */, + 9DBFA64E2694E66A00B9C5E0 /* abCOpSqrt.h */, + 9DBFA64F2694E66A00B9C5E0 /* abCOpMult.c */, + 9DBFA6502694E66A00B9C5E0 /* abCOpAtan.c */, + 9DBFA6512694E66A00B9C5E0 /* abCOpAcos.h */, + 9DBFA6522694E66A00B9C5E0 /* abCOpAnd.h */, + 9DBFA6532694E66A00B9C5E0 /* abCOpLn.h */, + 9DBFA6542694E66A00B9C5E0 /* abCOpAsr.h */, + 9DBFA6552694E66A00B9C5E0 /* abCOpLog.c */, + 9DBFA6562694E66A00B9C5E0 /* abCOpSq.c */, + 9DBFA6572694E66A00B9C5E0 /* abCOpHex.c */, + 9DBFA6582694E66A00B9C5E0 /* abCOpDec.h */, + 9DBFA6592694E66A00B9C5E0 /* abCOpAsin.h */, ); path = ops; sourceTree = ""; }; - 9DFA2A3722FBB55A00CFBC74 /* copydir */ = { + 9DBFA65B2694E66A00B9C5E0 /* shell */ = { isa = PBXGroup; children = ( - 9DFA2A3822FBB55A00CFBC74 /* abCalcHelp */, - ); - path = copydir; - sourceTree = ""; - }; - 9DFA2A4422FBB55A00CFBC74 /* shell */ = { - isa = PBXGroup; - children = ( - 9DFA2A4522FBB55A00CFBC74 /* abCMain.c */, + 9DBFA65C2694E66A00B9C5E0 /* abCMain.c */, ); path = shell; sourceTree = ""; }; - 9DFA2A4622FBB55B00CFBC74 /* expr */ = { + 9DBFA65D2694E66A00B9C5E0 /* expr */ = { isa = PBXGroup; children = ( - 9DFA2A4722FBB55B00CFBC74 /* abCExpReal.h */, - 9DFA2A4822FBB55B00CFBC74 /* abCExprInt.c */, - 9DFA2A4922FBB55B00CFBC74 /* abCExpr.h */, - 9DFA2A4A22FBB55B00CFBC74 /* abCExpReal.c */, - 9DFA2A4B22FBB55B00CFBC74 /* abCExprInt.h */, - 9DFA2A4C22FBB55B00CFBC74 /* abCExpr.c */, + 9DBFA65E2694E66A00B9C5E0 /* abCExpReal.h */, + 9DBFA65F2694E66A00B9C5E0 /* abCExprInt.c */, + 9DBFA6602694E66A00B9C5E0 /* abCExpr.h */, + 9DBFA6612694E66A00B9C5E0 /* abCExpReal.c */, + 9DBFA6622694E66A00B9C5E0 /* abCExprInt.h */, + 9DBFA6632694E66A00B9C5E0 /* abCExpr.c */, ); path = expr; sourceTree = ""; }; - 9DFA2A4D22FBB55C00CFBC74 /* screenshots */ = { + 9DBFA6692694E66A00B9C5E0 /* screenshots */ = { isa = PBXGroup; children = ( - 9DFA2A4E22FBB55C00CFBC74 /* abCalc.png */, - 9DFA2A4F22FBB55C00CFBC74 /* abCalcNDA.png */, + 9DBFA66A2694E66A00B9C5E0 /* abCalc.png */, + 9DBFA66B2694E66A00B9C5E0 /* abCalcNDA.png */, ); path = screenshots; sourceTree = ""; }; - 9DFA2A5022FBB55C00CFBC74 /* nda */ = { - isa = PBXGroup; - children = ( - 9DFA2A5122FBB55C00CFBC74 /* abCalcNDA.rez */, - 9DFA2A5222FBB55C00CFBC74 /* abCalcNDA.c */, - 9DFA2A5322FBB55C00CFBC74 /* abCalcNDA.h */, - ); - path = nda; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXLegacyTarget section */ - 9DFA299822FBB4E500CFBC74 /* abCalc */ = { + 9DBFA59D2694E5DB00B9C5E0 /* abCalc */ = { isa = PBXLegacyTarget; buildArgumentsString = "-C abCalc $(ACTION)"; - buildConfigurationList = 9DFA29C322FBB4E500CFBC74 /* Build configuration list for PBXLegacyTarget "abCalc" */; + buildConfigurationList = 9DBFA5D02694E5DB00B9C5E0 /* Build configuration list for PBXLegacyTarget "abCalc" */; buildPhases = ( ); buildToolPath = /usr/bin/make; @@ -420,9 +475,9 @@ /* End PBXLegacyTarget section */ /* Begin PBXNativeTarget section */ - 9DFA299922FBB4E500CFBC74 /* Binary */ = { + 9DBFA59E2694E5DB00B9C5E0 /* Binary */ = { isa = PBXNativeTarget; - buildConfigurationList = 9DFA29C622FBB4E500CFBC74 /* Build configuration list for PBXNativeTarget "Binary" */; + buildConfigurationList = 9DBFA5D32694E5DB00B9C5E0 /* Build configuration list for PBXNativeTarget "Binary" */; buildPhases = ( ); buildRules = ( @@ -431,12 +486,12 @@ ); name = Binary; productName = Binary; - productReference = 9DFA299A22FBB4E500CFBC74 /* abCalc */; + productReference = 9DBFA59F2694E5DB00B9C5E0 /* abCalc */; productType = "com.apple.product-type.tool"; }; - 9DFA299C22FBB4E500CFBC74 /* DiskImage */ = { + 9DBFA5A12694E5DB00B9C5E0 /* DiskImage */ = { isa = PBXNativeTarget; - buildConfigurationList = 9DFA29C922FBB4E500CFBC74 /* Build configuration list for PBXNativeTarget "DiskImage" */; + buildConfigurationList = 9DBFA5D62694E5DB00B9C5E0 /* Build configuration list for PBXNativeTarget "DiskImage" */; buildPhases = ( ); buildRules = ( @@ -445,16 +500,30 @@ ); name = DiskImage; productName = DiskImage; - productReference = 9DFA299D22FBB4E500CFBC74 /* abCalc.2mg */; + productReference = 9DBFA5A22694E5DB00B9C5E0 /* abCalc.2mg */; productType = "com.apple.product-type.tool"; }; - 9DFA29A122FBB4E500CFBC74 /* doNotBuild */ = { + 9DBFA5A32694E5DB00B9C5E0 /* Archive */ = { isa = PBXNativeTarget; - buildConfigurationList = 9DFA29CC22FBB4E500CFBC74 /* Build configuration list for PBXNativeTarget "doNotBuild" */; + buildConfigurationList = 9DBFA5D92694E5DB00B9C5E0 /* Build configuration list for PBXNativeTarget "Archive" */; buildPhases = ( - 9DFA299E22FBB4E500CFBC74 /* Sources */, - 9DFA299F22FBB4E500CFBC74 /* Frameworks */, - 9DFA29A022FBB4E500CFBC74 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Archive; + productName = Archive; + productReference = 9DBFA5A42694E5DB00B9C5E0 /* abCalc.shk */; + productType = "com.apple.product-type.tool"; + }; + 9DBFA5A82694E5DB00B9C5E0 /* doNotBuild */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9DBFA5DC2694E5DB00B9C5E0 /* Build configuration list for PBXNativeTarget "doNotBuild" */; + buildPhases = ( + 9DBFA5A52694E5DB00B9C5E0 /* Sources */, + 9DBFA5A62694E5DB00B9C5E0 /* Frameworks */, + 9DBFA5A72694E5DB00B9C5E0 /* CopyFiles */, ); buildRules = ( ); @@ -462,70 +531,123 @@ ); name = doNotBuild; productName = doNotBuild; - productReference = 9DFA29A222FBB4E500CFBC74 /* doNotBuild */; + productReference = 9DBFA5A92694E5DB00B9C5E0 /* doNotBuild */; productType = "com.apple.product-type.tool"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 9DFA299422FBB4E500CFBC74 /* Project object */ = { + 9DBFA5992694E5DB00B9C5E0 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1030; - ORGANIZATIONNAME = "Jeremy Rand"; + LastUpgradeCheck = 1240; TargetAttributes = { - 9DFA299822FBB4E500CFBC74 = { - CreatedOnToolsVersion = 10.3; + 9DBFA59D2694E5DB00B9C5E0 = { + CreatedOnToolsVersion = 12.4; }; - 9DFA299922FBB4E500CFBC74 = { - CreatedOnToolsVersion = 10.3; + 9DBFA59E2694E5DB00B9C5E0 = { + CreatedOnToolsVersion = 12.4; }; - 9DFA299C22FBB4E500CFBC74 = { - CreatedOnToolsVersion = 10.3; + 9DBFA5A12694E5DB00B9C5E0 = { + CreatedOnToolsVersion = 12.4; }; - 9DFA29A122FBB4E500CFBC74 = { - CreatedOnToolsVersion = 10.3; + 9DBFA5A32694E5DB00B9C5E0 = { + CreatedOnToolsVersion = 12.4; + }; + 9DBFA5A82694E5DB00B9C5E0 = { + CreatedOnToolsVersion = 12.4; }; }; }; - buildConfigurationList = 9DFA299722FBB4E500CFBC74 /* Build configuration list for PBXProject "abCalc" */; + buildConfigurationList = 9DBFA59C2694E5DB00B9C5E0 /* Build configuration list for PBXProject "abCalc" */; compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); - mainGroup = 9DFA299322FBB4E500CFBC74; - productRefGroup = 9DFA299B22FBB4E500CFBC74 /* Products */; + mainGroup = 9DBFA5982694E5DB00B9C5E0; + productRefGroup = 9DBFA5A02694E5DB00B9C5E0 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 9DFA299822FBB4E500CFBC74 /* abCalc */, - 9DFA299922FBB4E500CFBC74 /* Binary */, - 9DFA299C22FBB4E500CFBC74 /* DiskImage */, - 9DFA29A122FBB4E500CFBC74 /* doNotBuild */, + 9DBFA59D2694E5DB00B9C5E0 /* abCalc */, + 9DBFA59E2694E5DB00B9C5E0 /* Binary */, + 9DBFA5A12694E5DB00B9C5E0 /* DiskImage */, + 9DBFA5A32694E5DB00B9C5E0 /* Archive */, + 9DBFA5A82694E5DB00B9C5E0 /* doNotBuild */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 9DFA299E22FBB4E500CFBC74 /* Sources */ = { + 9DBFA5A52694E5DB00B9C5E0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9DFA2A5522FBB67A00CFBC74 /* Makefile in Sources */, - 9DFA29DA22FBB53500CFBC74 /* abCalc.c in Sources */, - 9DFA29DB22FBB53500CFBC74 /* abCError.c in Sources */, - 9DFA29D822FBB53500CFBC74 /* abCStack.c in Sources */, - 9DFA29D922FBB53500CFBC74 /* abCMode.c in Sources */, - 9DFA29AA22FBB4E500CFBC74 /* nda.mk in Sources */, + 9DBFA69D2694E66B00B9C5E0 /* abCExpReal.c in Sources */, + 9DBFA68B2694E66B00B9C5E0 /* abCOpOr.c in Sources */, + 9DBFA6842694E66B00B9C5E0 /* abCOpRr.c in Sources */, + 9DBFA6982694E66B00B9C5E0 /* abCOpSq.c in Sources */, + 9DBFA67D2694E66A00B9C5E0 /* abCOpAsin.c in Sources */, + 9DBFA6712694E66A00B9C5E0 /* abCOpStws.c in Sources */, + 9DBFA69B2694E66B00B9C5E0 /* abCMain.c in Sources */, + 9DBFA69A2694E66B00B9C5E0 /* Makefile in Sources */, + 9DBFA6802694E66A00B9C5E0 /* abCOpLn.c in Sources */, + 9DBFA6A12694E66B00B9C5E0 /* abCStack.c in Sources */, + 9DBFA67E2694E66A00B9C5E0 /* abCOpDec.c in Sources */, + 9DBFA6902694E66B00B9C5E0 /* abCOpCos.c in Sources */, + 9DBFA6702694E66A00B9C5E0 /* abCOpTan.c in Sources */, + 9DBFA6792694E66A00B9C5E0 /* abCOpTanh.c in Sources */, + 9DBFA6782694E66A00B9C5E0 /* abCOpPi.c in Sources */, + 9DBFA68C2694E66B00B9C5E0 /* abCOpR2B.c in Sources */, + 9DBFA6882694E66B00B9C5E0 /* abCOpDiv.c in Sources */, + 9DBFA6812694E66B00B9C5E0 /* abCOpAnd.c in Sources */, + 9DBFA6A02694E66B00B9C5E0 /* abCError.c in Sources */, + 9DBFA6922694E66B00B9C5E0 /* abCOpSin.c in Sources */, + 9DBFA6872694E66B00B9C5E0 /* abCOpXor.c in Sources */, + 9DBFA6912694E66B00B9C5E0 /* abCOpDrop.c in Sources */, + 9DBFA69C2694E66B00B9C5E0 /* abCExprInt.c in Sources */, + 9DBFA5B12694E5DB00B9C5E0 /* nda.mk in Sources */, + 9DBFA6942694E66B00B9C5E0 /* abCOpSr.c in Sources */, + 9DBFA66F2694E66A00B9C5E0 /* abCOpNot.c in Sources */, + 9DBFA6732694E66A00B9C5E0 /* abCOpAlog.c in Sources */, + 9DBFA66D2694E66A00B9C5E0 /* abCalcNDA.c in Sources */, + 9DBFA67F2694E66A00B9C5E0 /* abCOpAsr.c in Sources */, + 9DBFA6972694E66B00B9C5E0 /* abCOpLog.c in Sources */, + 9DBFA6742694E66A00B9C5E0 /* abCOpB2R.c in Sources */, + 9DBFA68E2694E66B00B9C5E0 /* abCOpSubtr.c in Sources */, + 9DBFA6832694E66B00B9C5E0 /* abCOpOct.c in Sources */, + 9DBFA6822694E66B00B9C5E0 /* abCOpAcos.c in Sources */, + 9DBFA6852694E66B00B9C5E0 /* abCOpInv.c in Sources */, + 9DBFA6862694E66B00B9C5E0 /* abCOpBin.c in Sources */, + 9DBFA6892694E66B00B9C5E0 /* abCOpSinh.c in Sources */, + 9DBFA68F2694E66B00B9C5E0 /* abCOpExp.c in Sources */, + 9DBFA6722694E66A00B9C5E0 /* abCOpSwap.c in Sources */, + 9DBFA6752694E66A00B9C5E0 /* abCOpRcws.c in Sources */, + 9DBFA67B2694E66A00B9C5E0 /* abCOpSqrt.c in Sources */, + 9DBFA6772694E66A00B9C5E0 /* abCOpAdd.c in Sources */, + 9DBFA67C2694E66A00B9C5E0 /* abCOpChs.c in Sources */, + 9DBFA6A22694E66B00B9C5E0 /* abCMode.c in Sources */, + 9DBFA6992694E66B00B9C5E0 /* abCOpHex.c in Sources */, + 9DBFA67A2694E66A00B9C5E0 /* abCOpCosh.c in Sources */, + 9DBFA69F2694E66B00B9C5E0 /* abCalc.c in Sources */, + 9DBFA6962694E66B00B9C5E0 /* abCOpAtan.c in Sources */, + 9DBFA66E2694E66A00B9C5E0 /* abCOpSl.c in Sources */, + 9DBFA68D2694E66B00B9C5E0 /* abCOp.c in Sources */, + 9DBFA68A2694E66B00B9C5E0 /* abCOpClear.c in Sources */, + 9DBFA6952694E66B00B9C5E0 /* abCOpMult.c in Sources */, + 9DBFA6762694E66A00B9C5E0 /* abCOpRl.c in Sources */, + 9DBFA6932694E66B00B9C5E0 /* abCOpPower.c in Sources */, + 9DBFA69E2694E66B00B9C5E0 /* abCExpr.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - 9DFA29C122FBB4E500CFBC74 /* Debug */ = { + 9DBFA5CE2694E5DB00B9C5E0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -551,6 +673,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -581,7 +704,7 @@ }; name = Debug; }; - 9DFA29C222FBB4E500CFBC74 /* Release */ = { + 9DBFA5CF2694E5DB00B9C5E0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -607,6 +730,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -630,7 +754,7 @@ }; name = Release; }; - 9DFA29C422FBB4E500CFBC74 /* Debug */ = { + 9DBFA5D12694E5DB00B9C5E0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; @@ -645,7 +769,7 @@ }; name = Debug; }; - 9DFA29C522FBB4E500CFBC74 /* Release */ = { + 9DBFA5D22694E5DB00B9C5E0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; @@ -657,47 +781,72 @@ }; name = Release; }; - 9DFA29C722FBB4E500CFBC74 /* Debug */ = { + 9DBFA5D42694E5DB00B9C5E0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = VD9FGCW36C; + ENABLE_HARDENED_RUNTIME = YES; PRODUCT_NAME = abCalc; }; name = Debug; }; - 9DFA29C822FBB4E500CFBC74 /* Release */ = { + 9DBFA5D52694E5DB00B9C5E0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = VD9FGCW36C; + ENABLE_HARDENED_RUNTIME = YES; PRODUCT_NAME = abCalc; }; name = Release; }; - 9DFA29CA22FBB4E500CFBC74 /* Debug */ = { + 9DBFA5D72694E5DB00B9C5E0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = VD9FGCW36C; + ENABLE_HARDENED_RUNTIME = YES; PRODUCT_NAME = abCalc.2mg; }; name = Debug; }; - 9DFA29CB22FBB4E500CFBC74 /* Release */ = { + 9DBFA5D82694E5DB00B9C5E0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = VD9FGCW36C; + ENABLE_HARDENED_RUNTIME = YES; PRODUCT_NAME = abCalc.2mg; }; name = Release; }; - 9DFA29CD22FBB4E500CFBC74 /* Debug */ = { + 9DBFA5DA2694E5DB00B9C5E0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = VD9FGCW36C; + ENABLE_HARDENED_RUNTIME = YES; + PRODUCT_NAME = abCalc.shk; + }; + name = Debug; + }; + 9DBFA5DB2694E5DB00B9C5E0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = VD9FGCW36C; + ENABLE_HARDENED_RUNTIME = YES; + PRODUCT_NAME = abCalc.shk; + }; + name = Release; + }; + 9DBFA5DD2694E5DB00B9C5E0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = VD9FGCW36C; + ENABLE_HARDENED_RUNTIME = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "inline(X,Y)=\"\"\n", "extended=double\n", @@ -714,11 +863,12 @@ }; name = Debug; }; - 9DFA29CE22FBB4E500CFBC74 /* Release */ = { + 9DBFA5DE2694E5DB00B9C5E0 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = VD9FGCW36C; + ENABLE_HARDENED_RUNTIME = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "inline(X,Y)=\"\"\n", "extended=double\n", @@ -738,52 +888,61 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 9DFA299722FBB4E500CFBC74 /* Build configuration list for PBXProject "abCalc" */ = { + 9DBFA59C2694E5DB00B9C5E0 /* Build configuration list for PBXProject "abCalc" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9DFA29C122FBB4E500CFBC74 /* Debug */, - 9DFA29C222FBB4E500CFBC74 /* Release */, + 9DBFA5CE2694E5DB00B9C5E0 /* Debug */, + 9DBFA5CF2694E5DB00B9C5E0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9DFA29C322FBB4E500CFBC74 /* Build configuration list for PBXLegacyTarget "abCalc" */ = { + 9DBFA5D02694E5DB00B9C5E0 /* Build configuration list for PBXLegacyTarget "abCalc" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9DFA29C422FBB4E500CFBC74 /* Debug */, - 9DFA29C522FBB4E500CFBC74 /* Release */, + 9DBFA5D12694E5DB00B9C5E0 /* Debug */, + 9DBFA5D22694E5DB00B9C5E0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9DFA29C622FBB4E500CFBC74 /* Build configuration list for PBXNativeTarget "Binary" */ = { + 9DBFA5D32694E5DB00B9C5E0 /* Build configuration list for PBXNativeTarget "Binary" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9DFA29C722FBB4E500CFBC74 /* Debug */, - 9DFA29C822FBB4E500CFBC74 /* Release */, + 9DBFA5D42694E5DB00B9C5E0 /* Debug */, + 9DBFA5D52694E5DB00B9C5E0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9DFA29C922FBB4E500CFBC74 /* Build configuration list for PBXNativeTarget "DiskImage" */ = { + 9DBFA5D62694E5DB00B9C5E0 /* Build configuration list for PBXNativeTarget "DiskImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9DFA29CA22FBB4E500CFBC74 /* Debug */, - 9DFA29CB22FBB4E500CFBC74 /* Release */, + 9DBFA5D72694E5DB00B9C5E0 /* Debug */, + 9DBFA5D82694E5DB00B9C5E0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9DFA29CC22FBB4E500CFBC74 /* Build configuration list for PBXNativeTarget "doNotBuild" */ = { + 9DBFA5D92694E5DB00B9C5E0 /* Build configuration list for PBXNativeTarget "Archive" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9DFA29CD22FBB4E500CFBC74 /* Debug */, - 9DFA29CE22FBB4E500CFBC74 /* Release */, + 9DBFA5DA2694E5DB00B9C5E0 /* Debug */, + 9DBFA5DB2694E5DB00B9C5E0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9DBFA5DC2694E5DB00B9C5E0 /* Build configuration list for PBXNativeTarget "doNotBuild" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9DBFA5DD2694E5DB00B9C5E0 /* Debug */, + 9DBFA5DE2694E5DB00B9C5E0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 9DFA299422FBB4E500CFBC74 /* Project object */; + rootObject = 9DBFA5992694E5DB00B9C5E0 /* Project object */; } diff --git a/abCalc.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/abCalc.xcodeproj/project.xcworkspace/contents.xcworkspacedata index d343921..919434a 100644 --- a/abCalc.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/abCalc.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/abCalc.xcodeproj/project.xcworkspace/xcuserdata/jrand.xcuserdatad/UserInterfaceState.xcuserstate b/abCalc.xcodeproj/project.xcworkspace/xcuserdata/jrand.xcuserdatad/UserInterfaceState.xcuserstate index 2f9c2a7edfc62cf3c9692e3e77c1a2024c320409..55bdeea7d0635c82d47bf9ac261501f376d40225 100644 GIT binary patch literal 32400 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/abCalc.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist b/abCalc.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist index e82b209..109545c 100644 --- a/abCalc.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/abCalc.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,6 +4,11 @@ SchemeUserState + Archive.xcscheme_^#shared#^_ + + orderHint + 2 + Binary.xcscheme_^#shared#^_ orderHint @@ -12,7 +17,7 @@ DiskImage.xcscheme_^#shared#^_ orderHint - 2 + 4 abCalc.xcscheme_^#shared#^_ diff --git a/abCalc/Makefile b/abCalc/Makefile index 9ffe8b9..bd9aaa7 100644 --- a/abCalc/Makefile +++ b/abCalc/Makefile @@ -1,16 +1,16 @@ -all: - make -f nda.mk gen - make -f nda.mk build +all: make -f shell.mk gen make -f shell.mk build + make -f nda.mk gen + make -f nda.mk build gen: - make -f nda.mk gen make -f shell.mk gen + make -f nda.mk gen build: - make -f nda.mk build make -f shell.mk build + make -f nda.mk build clean: make -f shell.mk clean @@ -18,4 +18,4 @@ clean: execute: make -f nda.mk execute -# make -f shell.mk execute +# make -f shell.mk execute diff --git a/abCalc/abCalcHelp.md b/abCalc/abCalcHelp.md new file mode 100644 index 0000000..00bf099 --- /dev/null +++ b/abCalc/abCalcHelp.md @@ -0,0 +1 @@ +# Ass-Backwards Calculator Help: This document is split into the following sections: * Installation * UI Overview * Shell UI * A Bit About RPN * Number Formats * Operations ## Installation: To install abCalc, drag the file abCalcNDA to the Desk.Accs folder in your System folder on your boot drive. After rebooting, you should find "abCalc" in the Apple menu in any GUI application on your Apple //GS. Alternatively, if you have the IR Finder extra installed, you can just double click abCalcNDA from the Finder whenever you want to launch it. If you reboot, you will have to double click it again to add it because it won't be loaded automatically on boot up. ## UI Overview: The abCalc UI is split into the following major components. The list at the top is the "stack" where the numbers you are working with will be displayed. The stack always displays at least four items, even if there are not four things on the stack. Each item on the stack is prefixed with a number which is its depth on the stack where "1:" is the label for the item at the top of the stack and "2:" is the number just below the top of the stack, etc. The number at the top of the stack is displayed at the bottom of the list (did I mention that the NDA is called the "Ass-Backwards Calculator"). Any non-empty row on the stack can be selected and you can do a copy operation on the row. The number on that row will be copied to the clipboard. On the left side, directly below the stack is the entry box. This is where you can type in new numbers which go on the stack. You can actually do everything with abCalc with the keyboard. You can type in numbers or operations which manipulate the numbers on your stack. If you are typing in operations, you can type them in upper-case, lower-case or any mixture. abCalc does a case insensitive match for the operation. You can select text in the entry box and do the usual cut, copy and paste operations your selection. On the right side, directly below the stack is a long list of the operations available in abCalc. The operations are sorted into an order which groups them into the following types: arithmetic, stack, trigonomety, exponentials and logical. You can scroll through the operations but be careful. Just clicking on an operation in the list will result in that operation being executed. So, items in the list operate both as a cheat sheet of the operations available and as a way to execute those operations. Below the entry box is a series of buttons which make abCalc look just a bit like a classic calculator. You can use these buttons by clicking on them using your mouse or you can just type into the entry box directly. Whichever way you want to work. Note that the "+", "-", "x", "/" and "^" buttons do the same thing as their counterparts listed in the operation list. So you can add numbers in three ways: you can click the "+" button, you can click the "+" item in the operation list or you can type + followed by enter on your keyboard. The numbers 1 to 9 and letters A to F are there to allow you to enter numbers in both decimal and hexidecimal (hex numbers consist of numbers 1-9 and letters A-F). When you click them, the number or letter is inserted into the entry box. Similarly the period and # buttons insert those characters into the entry box. See number formats for the meaning the the # character. ## Shell UI: Included with abCalcNDA is a shell EXE called abCalc which you can use from GNO/ME if you have that installed on your Apple //GS. It has all the functionality of the NDA. When you launch the command from the shell, you will see the stack printed and a prompt where you can enter your numbers and operations. You enter numbers the same way you would using the NDA. All of the operations are supported from the shell version as are supported from the NDA. So, to calculate "`4 x 2`", you would type `4 2 * `. When you are done and want to leave abCalc, just type Ctrl-D. ## A Bit About RPN: Let's talk about some more backward-ness. RPN stands for "Reverse Polish Notation" and it is a different way to write arithmetic expressions. People are used to things like "`1 + 2`" but in RPN, that would be "`1 2 +`". The way to think about this is "Put the number 1 on the stack, then put the number 2 on the stack, then execute the + operation which takes the last two numbers from the stack, adds them and puts the result back on the stack". So, if you wanted to calculate "`1 + 2`" on abCalc, you would type or click the following: "`1 2 +`". NOTE, you can actually avoid pressing the second `` if you click the `+` button or the `+` operation from the operation list. When you click a button which executes an operation or select an operation from the operation list, anything in the entry box is first pushed onto the stack. Then, it executes the operation you selected. This is just a small shortcut you can use. In my examples in this section, I will always include the unnecessary ``. You can do more complex calculations by combining operations together. Imagine you wanted to calculate "`(1 + 2) * 3`". In abCalc, you would type or click the following: "`1 2 + 3 *`". But, what if you wanted "`1 + (2 * 3)`". That is easy also: "`1 2 3 * +`". In general, abCalc has two fundamental types of operations: unary operations and binary operations. Addition and multiplication are binary operations because they take two items from the stack (two - thus binary) and pushes a single result back onto the stack. A unary operation takes a single number from the stack and pushes a single result back onto the stack. An example of a unary operation is SIN which calculates the sine of a number in radians. So, to calculate "`sine(4)`", you would type or click the follwing: "`4 `". To calcuate "`3 * (sin(4 - 2))`", you would type or click the following: "`3 4 2 <-> <*>`". Remember, you can click SIN from the operation list or you can type "`sin`" into the entry box to execute the sine operation. Operations use case insensitive matching so you can enter "`Sin`", "`sin`", "`SIN`" or even "`SiN`". Whatever you like. There are operations which are neither unary nor binary (like DROP, CLEAR and RCWS) and those are documented later. RPN may seem unnatural and "ass-backwards" but with practice, it can start to become second nature to the point where you may dread using a standard calculator. ## Number Formats: abCalc operates on two types of numbers: real numbers and integer numbers. Real numbers are standard decimal numbers which may or may not have a fractional part. They may be expressed as an exponential number, like `6.283E15` which means "6.283 times 10 to the power of 15". The exponential can be negative for a very small number, like `4.712E-13` which means "4.712 times 10 to the power of minus 13". abCalc will automatically display very large or very small real numbers in exponential format. Entering negative real numbers and negative exponentials causes a minor problem in the calculator. The "-" character normally executes the subtract operation. There are some exceptions though. If the entry box is empty, pressing the "-" character will insert a minus character into the entry box. The calculator is assuming you want to enter a negative number. If you actually wanted the subtract operation, just press "" and the calculator will perform a subtract. If you have a positive or negative real number in the entry box followed by "E" or "e", then the calculator assumes you are entering an exponential number. If you then type "-" or hit the "-" button, it will insert a minus character after the "E". This allows you to enter negative exponents. If you have a number on the stack which you want to make negative, you probably want the CHS (change sign) operation. Integer numbers start with a "#" character. But before entering an integer, you need to know what base you are in and the bit width. By default, the calculator is in decimal mode and expects base 10 numbers. You can switch between bases by using the BIN (binary), OCT (octal), DEC (decimal) and HEX (hexadecimal) operations. The integer number you enter is interpreted using that base so if you are not sure, you may want to execute the specific base you intend to use. After the "#" character comes a series of 0's and 1's when entering a binary number. Or numbers from 0 to 7 for an octal number. In decimal mode, you would enter digits from 0 to 9. And in hexadecimal, the digits are the numbers from 0 to 9 and letters A through F. The letters can be entered in lower or uppercase when entering a hexadecimal number. An integer on the stack has the "#" prefix but also has a suffix to tell you the current base. The suffix is "b" for binary, "o" for octal, "d" for decimal and "h" for hexadecimal. This entry and display format is often used in HP RPN calculators which abCalc somewhat mimics. Other than the base, the other thing to be aware of with integer numbers is the current word size. By default, the calculator manipulates 32 bit integers. That means you can enter an integer from `#00000000h` to `#FFFFFFFFh`. But you can use the STWS operation to specify a different word size for your integers. If you want to work with 16 bit integers, push the real number "16" onto the stack and execute STWS. You can set the word size to any value from 1 to 32. All operations which manipulate integers respect that word size. So, if you rotate the bits in your integer to the left, then the high bit according to the current word size is rotated into the low bit. This way, if you want to do 8 bit math, 16 bit math or even 5 bit math, it is just a matter of setting your word size. There are two shortcuts when entering integers. Regardless of the current base, you can always enter a hex number by prefixing it with a "$" character. So, you can enter the hex number 42 by entering "$42" even if you happen to be in decimal mode. Also, you can use C like syntax and enter the hex number as "0x42". Note that C syntax for octal numbers does not work. The octal number 42 in C would be represented as "042" but that cannot be distinguished from the real number 42 with a leading zero. So, these shortcuts only work for hex numbers. Note that you can use the R2B and B2R operations to convert real numbers to integers and integer numbers to real numbers respectively. ## Operations: All of these operations can be entered directly into the entry box or selected from the operation list on the right side of the UI. The descriptions below are grouped into a series of related operations. ### Arithmetic Operations: #### +: The add operation takes two numbers from the stack and pushes the sum of those two numbers. The operation works with two real numbers and pushes a real number result. It also works with two integer numbers and pushes an integer result. And you can add a real number and an integer number. When you add a real and integer number, the real number is converted to an integer in the current word size and then those two numbers are added. The result is an integer number. #### -: The subtract operation takes two numbers from the stack and pushes the difference of those two numbers. To calculate "`4 - 2`", you would push 4, then 2 and then do the subtract. The operation works with two real numbers and pushes a real number result. It also works with two integer numbers and pushes an integer result. And you can subtract a real number and an integer number. When you subtract a real and integer number, the real number is converted to an integer in the current word size and then those two numbers are subtracted. The result is an integer number. #### *: The multiply operation takes two numbers from the stack and pushes the product of those two numbers. To calculate "`4 x 2`", you would push 4, then 2 and then do the multiply. The operation works with two real numbers and pushes a real number result. It also works with two integer numbers and pushes an integer result. And you can multiple a real number and an integer number. When you multiply a real and integer number, the real number is converted to an integer in the current word size and then those two numbers are multiplied. The result is an integer number. #### /: The divide operation takes two numbers from the stack and pushes the ratio of those two numbers. To calculate "`4 / 2`", you would push 4, then 2 and then do the divide. The operation works with two real numbers and pushes a real number result. It also works with two integer numbers and pushes an integer result. And you can divide a real number and an integer number. When you divide a real and integer number, the real number is converted to an integer in the current word size and then those two numbers are divided. The result is an integer number. #### CHS: The CHS operation stands for "CHange Sign". It takes a single real number from the stack and returns a real number with the opposite sign. Effectively it multiplies its argument by minus one. This operation does not work with integer numbers. #### INV: The INV operation is short for "INVerse". It takes a single real number from the stack and returns a real number which is the reciprocal of that number. Effectively it calculates "`1 / x`" where "`x`" is the number it pulls from the stack. This operation does not work with integer numbers. #### SQ: The SQ operation is short for "SQuare". It takes a single real number from the stack and returns a real number which is the square of that number. Effectively, it calculates "`x * x`" where "`x`" is the number it pulls from the stack. This operation does not work with integer numbers. #### SQRT: The SQRT operation is short for "SQuare RooT". It takes a single real number from the stack and returns a real number which is the square root of that number. Effectively, it calculates "`x ^ 0.5`" where "`x`" is the number it pulls from the stack. This operation does not work with integer numbers. #### ^: The power operation takes two numbers from the stack and pushes the result. To calculate "`4 ^ 2`", you would push 4, then 2 and then do the power operation. The operation works with two real numbers and pushes a real number result. This operation does not work with integer numbers. ### Stack Operations: #### DROP: This operation just pops the item off the top of the stack. It does not matter if the value is a real number or integer number. #### SWAP: This operation pops the two items off the tops of the stack and pushes them back onto the stack in reverse order. #### CLEAR: This operation removes all items from the stack. ### Trigonometry Operations: #### PI: This operation pushes the value of pi onto the stack as a real number. #### SIN: This operation takes a real number from the top of the stack and calculates the sine of that number as an angle in radians and pushes the result back onto the stack as a real number. This operation does not work with integer numbers. #### COS: This operation takes a real number from the top of the stack and calculates the cosine of that number as an angle in radians and pushes the result back onto the stack as a real number. This operation does not work with integer numbers. #### TAN: This operation takes a real number from the top of the stack and calculates the tangent of that number as an angle in radians and pushes the result back onto the stack as a real number. This operation does not work with integer numbers. #### ASIN: This operation takes a real number from the top of the stack and calculates the inverse sine of that number and pushes the result back onto the stack as an angle in radians. This operation does not work with integer numbers. #### ACOS: This operation takes a real number from the top of the stack and calculates the inverse cosine of that number and pushes the result back onto the stack as an angle in radians. This operation does not work with integer numbers. #### ATAN: This operation takes a real number from the top of the stack and calculates the inverse tangent of that number and pushes the result back onto the stack as an angle in radians. This operation does not work with integer numbers. ### Exponential Operations: #### LOG: This operation takes a real number from the top of the stack and calculates the base ten logarithm of that number and pushes the result back onto the stack. This operation does not work with integer numbers. #### ALOG: This operation takes a real number from the top of the stack and calculates ten to the power of that number and pushes the result back onto the stack. This operation is the inverse of the LOG operation. This operation does not work with integer numbers. #### LN: This operation takes a real number from the top of the stack and calculates the base e logarithm of that number and pushes that result back onto the stack. This operation does not work with integer numbers. #### EXP: This operation takes a real number from the top of the stack and calculates e to the power of that number and pushes that result back onto the stack. This operation is the inverse of the LN operation. This operation does not work with integer numbers. #### SINH: This operation takes a real number from the top of the stack and calculates the hyperbolic sine of that number and pushes that result back onto the stack. This operation does not work with integer numbers. #### COSH: This operation takes a real number from the top of the stack and calculates the hyperbolic cosine of that number and pushes that result back onto the stack. This operation does not work with integer numbers. #### TANH: This operation takes a real number from the top of the stack and calculates the hyperbolic tangent of that number and pushes that result back onto the stack. This operation does not work with integer numbers. ### Logical Operations: #### R2B: This operation takes a real number from the stack and converts it to an integer given the current word size. The converted number is pushed onto the stack. #### B2R: This operation takes a integer number from the stack and converts it to a real number. The converted number is pushed onto the stack. #### AND: This operation takes two integer numbers from the top of the stack and pushes the logical and of those two numbers back onto the stack as an integer number. This operation does not work with real numbers. #### OR: This operation takes two integer numbers from the top of the stack and pushes the logical or of those two numbers back onto the stack as an integer number. This operation does not work with real numbers. #### XOR: This operation takes two integer numbers from the top of the stack and pushes the logical exclusive or of those two numbers back onto the stack as an integer number. This operation does not work with real numbers. #### NOT: This operation takes a single integer number from the top of the stack and pushes an integer result with each bit inverted (0 to 1, 1 to 0). This operation does not work with real numbers. #### SL: This operation takes a single integer number from the top of the stack and shifts each bit one position to the left, inserting a 0 bit at the low bit position. The high bit (as determined by the word size) is lost. This operation is basically like multiplying by two. This operation does not work with real numbers. #### RL: This operation takes a single integer number from the top of the stack and rotates each bit one position to the left and pushes the result back onto the stack. The high bit (as determined by the word size) becomes the bit at the low bit position. This operation does not work with real numbers. #### SR: This operation takes a single integer number from the top of the stack and shifts each bit one position to the right, inserting a 0 bit at the high bit position (as determined by the word size). The bit at the low bit position is lost. This operation is basically like dividing by two. This operation does not work with real numbers. #### RR: This operation takes a single integer number from the top of the stack and rotates each bit one position to the right and pushes the result back onto the stack. This low bit becomes the bit at the high bit position (as determined by the word size). This operation does not work with real numbers. #### ASR: This operation takes a single integer number from the top of the stack and shifts each bit one position to the right. However, the high bit (as determined by the word size) is preserved so if it was a 1, it remains a 1. This operation is basically like dividing by two where the high bit represents a sign bit. This operation does not work with real numbers. #### BIN: This operation takes no values from the stack and pushes nothing onto the stack. It sets the default integer base size to binary. Any integers on the stack will be displayed in binary format after executing this operation. When entering an integer, the calculator will expect a binary number. #### OCT: This operation takes no values from the stack and pushes nothing onto the stack. It sets the default integer base size to octal. Any integers on the stack will be displayed in octal format after executing this operation. When entering an integer, the calculator will expect an octal number. #### DEC: This operation takes no values from the stack and pushes nothing onto the stack. It sets the default integer base size to decimal. Any integers on the stack will be displayed in decimal format after executing this operation. When entering an integer, the calculator will expect a decimal number. #### HEX: This operation takes no values from the stack and pushes nothing onto the stack. It sets the default integer base size to hexadecimal. Any integers on the stack will be displayed in hexadecimal format after executing this operation. When entering an integer, the calculator will expect a hexadecimal number. #### STWS: This operation takes a single real number from the stack and pushes nothing onto the stack. The real number should be between 1 and 32 and have no fractional part. The value becomes the new word size used for integers. So, if you want to do 16 bit integer math, you would push 16 onto the stack and then execute the STWS operation. #### RCWS: This operation takes no values from the stack and pushes a single real number onto the stack. The real number is between 1 and 32 and is the current word size used for integers. Use the STWS operation to change the word size. \ No newline at end of file diff --git a/abCalc/copydir/abCalcHelp b/abCalc/copydir/abCalcHelp deleted file mode 100644 index 1b9a5cb..0000000 --- a/abCalc/copydir/abCalcHelp +++ /dev/null @@ -1 +0,0 @@ -Ass-Backwards Calculator Help: This document is split into the following sections: 1. Installation 2. UI Overview 3. Shell UI 4. A Bit About RPN 5. Number Formats 6. Operations 1. Installation: To install abCalc, drag the file abCalcNDA to the Desk.Accs folder in your System folder on your boot drive. After rebooting, you should find "abCalc" in the Apple menu in any GUI application on your Apple //GS. Alternatively, if you have the IR Finder extra installed, you can just double click abCalcNDA from the Finder whenever you want to launch it. If you reboot, you will have to double click it again to add it because it won't be loaded automatically on boot up. 2. UI Overview: The abCalc UI is split into the following major components: 1. The list at the top is the "stack" where the numbers you are working with will be displayed. The stack always displays at least four items, even if there are not four things on the stack. Each item on the stack is prefixed with a number which is its depth on the stack where "1:" is the label for the item at the top of the stack and "2:" is the number just below the top of the stack, etc. The number at the top of the stack is displayed at the bottom of the list (did I mention that the NDA is called the "Ass-Backwards Calculator"). Any non-empty row on the stack can be selected and you can do a copy operation on the row. The number on that row will be copied to the clipboard. 2. On the left side, directly below the stack is the entry box. This is where you can type in new numbers which go on the stack. You can actually do everything with abCalc with the keyboard. You can type in numbers or operations which manipulate the numbers on your stack. If you are typing in operations, you can type them in upper-case, lower-case or any mixture. abCalc does a case insensitive match for the operation. You can select text in the entry box and do the usual cut, copy and paste operations your selection. 3. On the right side, directly below the stack is a long list of the operations available in abCalc. The operations are sorted into an order which groups them into the following types: arithmetic, stack, trigonomety, exponentials and logical. You can scroll through the operations but be careful. Just clicking on an operation in the list will result in that operation being executed. So, items in the list operate both as a cheat sheet of the operations available and as a way to execute those operations. 4. Below the entry box is a series of buttons which make abCalc look just a bit like a classic calculator. You can use these buttons by clicking on them using your mouse or you can just type into the entry box directly. Whichever way you want to work. Note that the "+", "-", "x", "/" and "^" buttons do the same thing as their counterparts listed in the operation list. So you can add numbers in three ways: you can click the "+" button, you can click the "+" item in the operation list or you can type + followed by enter on your keyboard. The numbers 1 to 9 and letters A to F are there to allow you to enter numbers in both decimal and hexidecimal (hex numbers consist of numbers 1-9 and letters A-F). When you click them, the number or letter is inserted into the entry box. Similarly the period and # buttons insert those characters into the entry box. See number formats for the meaning the the # character. 3. Shell UI: Included with abCalcNDA is a shell EXE called abCalc which you can use from GNO/ME if you have that installed on your Apple //GS. It has all the functionality of the NDA. When you launch the command from the shell, you will see the stack printed and a prompt where you can enter your numbers and operations. You enter numbers the same way you would using the NDA. All of the operations are supported from the shell version as are supported from the NDA. So, to calculate "4 x 2", you would type 4 2 * . When you are done and want to leave abCalc, just type Ctrl-D. 4. A Bit About RPN: Let's talk about some more backward-ness. RPN stands for "Reverse Polish Notation" and it is a different way to write arithmetic expressions. People are used to things like "1 + 2" but in RPN, that would be "1 2 +". The way to think about this is "Put the number 1 on the stack, then put the number 2 on the stack, then execute the + operation which takes the last two numbers from the stack, adds them and puts the result back on the stack". So, if you wanted to calculate "1+2" on abCalc, you would type or click the following: "1 2 +". NOTE, you can actually avoid pressing the second if you click the + button or the + operation from the operation list. When you click a button which executes an operation or select an operation from the operation list, anything in the entry box is first pushed onto the stack. Then, it executes the operation you selected. This is just a small shortcut you can use. In my examples in this section, I will always include the unnecessary . You can do more complex calculations by combining operations together. Imagine you wanted to calculate "(1+2)*3". In abCalc, you would type or click the following: "1 2 + 3 *". But, what if you wanted "1+(2*3)". That is easy also: "1 2 3 * +". In general, abCalc has two fundamental types of operations: unary operations and binary operations. Addition and multiplication is a binary operation because it takes two items from the stack (two - thus binary) and pushes a single result back onto the stack. A unary operation takes a single number from the stack and pushes a single result back onto the stack. An example of a unary operation is SIN which calculates the sine of a number in radians. So, to calculate "sine(4)", you would type or click the follwing: "4 ". To calcuate "3*(sin(4-2))", you would type or click the following: "3 4 2 <-> <*>". Remember, you can click SIN from the operation list or you can type "sin" into the entry box to execute the sine operation. Operations use case insensitive matching so you can enter "Sin", "sin", "SIN" or even "SiN". Whatever you like. There are operations which are neither unary nor binary (like DROP, CLEAR and RCWS) and those are documented later. RPN may seem unnatural and "ass-backwards" but with practice, it can start to become second nature to the point where you may dread using a standard calculator. 5. Number Formats: abCalc operates on two types of numbers: real numbers and integer numbers. Real numbers are standard decimal numbers which may or may not have a fractional part. They may be expressed as an exponential number, like 6.283E15 which means "6.283 times 10 to the power of 15". The exponential can be negative for a very small number, like 4.712E-13 which means "4.712 times 10 to the power of minus 13". abCalc will automatically display very large or very small real numbers in exponential format. Entering negative real numbers and negative exponentials causes a minor problem in the calculator. The "-" character normally executes the subtract operation. There are some exceptions though. If the entry box is empty, pressing the "-" character will insert a minus character into the entry box. The calculator is assuming you want to enter a negative number. If you actually wanted the subtract operation, just press "" and the calculator will perform a subtract. If you have a positive or negative real number in the entry box followed by "E" or "e", then the calculator assumes you are entering an exponential number. If you then type "-" or hit the "-" button, it will insert a minus character after the "E". This allows you to enter negative exponents. If you have a number on the stack which you want to make negative, you probably want the CHS (change sign) operation. Integer numbers start with a "#" character. But before entering an integer, you need to know what base you are in and the bit width. By default, the calculator is in decimal mode and expects base 10 numbers. You can switch between bases by using the BIN (binary), OCT (octal), DEC (decimal) and HEX (hexadecimal) operations. The integer number you enter is interpreted using that base so if you are not sure, you may want to execute the specific base you intend to use. After the "#" character comes a series of 0's and 1's when entering a binary number. Or numbers from 0 to 7 for an octal number. In decimal mode, you would enter digits from 0 to 9. And in hexadecimal, the digits are the numbers from 0 to 9 and letters A through F. The letters can be entered in lower or uppercase when entering a hexadecimal number. An integer on the stack has the "#" prefix but also has a suffix to tell you the current base. The suffix is "b" for binary, "o" for octal, "d" for decimal and "h" for hexadecimal. This entry and display format is often used in HP RPN calculators which abCalc somewhat mimics. Other than the base, the other thing to be aware of with integer numbers is the current word size. By default, the calculator manipulates 32 bit integers. That means you can enter an integer from #00000000h to $FFFFFFFFh. But you can use the STWS operation to specify a different word size for your integers. If you want to work with 16 bit integers, push the real number "16" onto the stack and execute STWS. You can set the word size to any value from 1 to 32. All operations which manipulate integers respect that word size. So, if you rotate the bits in your integer to the left, then the high bit according to the current word size is rotated into the low bit. This way, if you want to do 8 bit math, 16 bit math or even 5 bit math, it is just a matter of setting your word size. There are two shortcuts when entering integers. Regardless of the current base, you can always enter a hex number by prefixing it with a "$" character. So, you can enter the hex number 42 by entering "$42" even if you happen to be in decimal mode. Also, you can use C like syntax and enter the hex number as "0x42". Note that C syntax for octal numbers does not work. The octal number 42 in C would be represented as "042" but that cannot be distinguished from the real number 42 with a leading zero. So, these shortcuts only work for hex numbers. Note that you can use the R2B and B2R operations to convert real numbers to integers and integer numbers to real numbers respectively. 6. Operations: All of these operations can be entered directly into the entry box or selected from the operation list on the right side of the UI. The descriptions below are grouped into a series of related operations. Arithmetic Operations: +: The add operation takes two numbers from the stack and pushes the sum of those two numbers. The operation works with two real numbers and pushes a real number result. It also works with two integer numbers and pushes ain integer result. And you can add a real number and an integer number. When you add a real and integer number, the real number is converted to an integer in the current word size and then those two numbers are added. The result is an integer number. -: The subtract operation takes two numbers from the stack and pushes the difference of those two numbers. To calculate "4 - 2", you would push 4, then 2 and then do the subtract. The operation works with two real numbers and pushes a real number result. It also works with two integer numbers and pushes an integer result. And you can subtract a real number and an integer number. When you subtract a real and integer number, the real number is converted to an integer in the current word size and then those two numbers are subtracted. The result is an integer number. *: The multiply operation takes two numbers from the stack and pushes the product of those two numbers. To calculate "4 x 2", you would push 4, then 2 and then do the multiply. The operation works with two real numbers and pushes a real number result. It also works with two integer numbers and pushes an integer result. And you can multiple a real number and an integer number. When you multiply a real and integer number, the real number is converted to an integer in the current word size and then those two numbers are multiplied. The result is an integer number. /: The divide operation takes two numbers from the stack and pushes the ratio of those two numbers. To calculate "4 / 2", you would push 4, then 2 and then do the divide. The operation works with two real numbers and pushes a real number result. It also works with two integer numbers and pushes an integer result. And you can divide a real number and an integer number. When you divide a real and integer number, the real number is converted to an integer in the current word size and then those two numbers are divided. The result is an integer number. CHS: The CHS operation stands for "CHange Sign". It takes a single real number from the stack and returns a real number with the opposite sign. Effectively it multiplies its argument by minus one. This operation does not work with integer numbers. INV: The INV operation is short for "INVerse". It takes a single real number from the stack and returns a real number which is the reciprocal of that number. Effectively it calculates "1 / x" where "x" is the number it pulls from the stack. This operation does not work with integer numbers. SQ: The SQ operation is short for "SQuare". It takes a single real number from the stack and returns a real number which is the square of that number. Effectively, it calculates "x * x" where "x" is the number it pulls from the stack. This operation does not work with integer numbers. SQRT: The SQRT operation is short for "SQuare RooT". It takes a single real number from the stack and returns a real number which is the square root of that number. Effectively, it calculates "x ^ 0.5" where "x" is the number it pulls from the stack. This operation does not work with integer numbers. ^: The power operation takes two numbers from the stack and pushes the result. To calculate "4 ^ 2", you would push 4, then 2 and then do the power operation. The operation works with two real numbers and pushes a real number result. This operation does not work with integer numbers. Stack Operations: DROP: This operation just pops the item off the top of the stack. It does not matter if the value is a real number or integer number. SWAP: This operation pops the two items off the tops of the stack and pushes them back onto the stack in reverse order. CLEAR: This operation removes all items from the stack. Trigonometry Operations: PI: This operation pushes the value of pi onto the stack as a real number. SIN: This operation takes a real number from the top of the stack and calculates the sine of that number as an angle in radians and pushes the result back onto the stack as a real number. This operation does not work with integer numbers. COS: This operation takes a real number from the top of the stack and calculates the cosine of that number as an angle in radians and pushes the result back onto the stack as a real number. This operation does not work with integer numbers. TAN: This operation takes a real number from the top of the stack and calculates the tangent of that number as an angle in radians and pushes the result back onto the stack as a real number. This operation does not work with integer numbers. ASIN: This operation takes a real number from the top of the stack and calculates the inverse sine of that number and pushes the result back onto the stack as an angle in radians. This operation does not work with integer numbers. ACOS: This operation takes a real number from the top of the stack and calculates the inverse cosine of that number and pushes the result back onto the stack as an angle in radians. This operation does not work with integer numbers. ATAN: This operation takes a real number from the top of the stack and calculates the inverse tangent of that number and pushes the result back onto the stack as an angle in radians. This operation does not work with integer numbers. Exponential Operations: LOG: This operation takes a real number from the top of the stack and calculates the base ten logarithm of that number and pushes the result back onto the stack. This operation does not work with integer numbers. ALOG: This operation takes a real number from the top of the stack and calculates ten to the power of that number and pushes the result back onto the stack. This operation is the inverse of the LOG operation. This operation does not work with integer numbers. LN: This operation takes a real number from the top of the stack and calculates the base e logarithm of that number and pushes that result back onto the stack. This operation does not work with integer numbers. EXP: This operation takes a real number from the top of the stack and calculates e to the power of that number and pushes that result back onto the stack. This operation is the inverse of the LN operation. This operation does not work with integer numbers. SINH: This operation takes a real number from the top of the stack and calculates the hyperbolic sine of that number and pushes that result back onto the stack. This operation does not work with integer numbers. COSH: This operation takes a real number from the top of the stack and calculates the hyperbolic cosine of that number and pushes that result back onto the stack. This operation does not work with integer numbers. TANH: This operation takes a real number from the top of the stack and calculates the hyperbolic tangent of that number and pushes that result back onto the stack. This operation does not work with integer numbers. Logical Operations: R2B: This operation takes a real number from the stack and converts it to an integer given the current word size. The converted number is pushed onto the stack. B2R: This operation takes a integer number from the stack and converts it to a real number. The converted number is pushed onto the stack. AND: This operation takes two integer numbers from the top of the stack and pushes the logical and of those two numbers back onto the stack as an integer number. This operation does not work with real numbers. OR: This operation takes two integer numbers from the top of the stack and pushes the logical or of those two numbers back onto the stack as an integer number. This operation does not work with real numbers. XOR: This operation takes two integer numbers from the top of the stack and pushes the logical exclusive or of those two numbers back onto the stack as an integer number. This operation does not work with real numbers. NOT: This operation takes a single integer number from the top of the stack and pushes an integer result with each bit inverted (0 to 1, 1 to 0). This operation does not work with real numbers. SL: This operation takes a single integer number from the top of the stack and shifts each bit one position to the left, inserting a 0 bit at the low bit position. The high bit (as determined by the word size) is lost. This operation is basically like multiplying by two. This operation does not work with real numbers. RL: This operation takes a single integer number from the top of the stack and rotates each bit one position to the left and pushes the result back onto the stack. The high bit (as determined by the word size) becomes the bit at the low bit position. This operation does not work with real numbers. SR: This operation takes a single integer number from the top of the stack and shifts each bit one position to the right, inserting a 0 bit at the high bit position (as determined by the word size). The bit at the low bit position is lost. This operation is basically like dividing by two. This operation does not work with real numbers. RR: This operation takes a single integer number from the top of the stack and rotates each bit one position to the right and pushes the result back onto the stack. This low bit becomes the bit at the high bit position (as determined by the word size). This operation does not work with real numbers. ASR: This operation takes a single integer number from the top of the stack and shifts each bit one position to the right. However, the high bit (as determined by the word size) is preserved so if it was a 1, it remains a 1. This operation is basically like dividing by two where the high bit represents a sign bit. This operation does not work with real numbers. BIN: This operation takes no values from the stack and pushes nothing onto the stack. It sets the default integer base size to binary. Any integers on the stack will be displayed in binary format after executing this operation. When entering an integer, the calculator will expect a binary number. OCT: This operation takes no values from the stack and pushes nothing onto the stack. It sets the default integer base size to octal. Any integers on the stack will be displayed in octal format after executing this operation. When entering an integer, the calculator will expect an octal number. DEC: This operation takes no values from the stack and pushes nothing onto the stack. It sets the default integer base size to decimal. Any integers on the stack will be displayed in decimal format after executing this operation. When entering an integer, the calculator will expect a decimal number. HEX: This operation takes no values from the stack and pushes nothing onto the stack. It sets the default integer base size to hexadecimal. Any integers on the stack will be displayed in hexadecimal format after executing this operation. When entering an integer, the calculator will expect a hexadecimal number. STWS: This operation takes a single real number from the stack and pushes nothing onto the stack. The real number should be between 1 and 32 and have no fractional part. The value becomes the new word size used for integers. So, if you want to do 16 bit integer math, you would push 16 onto the stack and then execute the STWS operation. RCWS: This operation takes no values from the stack and pushes a single real number onto the stack. The real number is between 1 and 32 and is the current word size used for integers. Use the STWS operation to change the word size. \ No newline at end of file diff --git a/abCalc/make/config.txt b/abCalc/make/config.txt index 6ff83e4..76d0ff9 100644 --- a/abCalc/make/config.txt +++ b/abCalc/make/config.txt @@ -1,4 +1,4 @@ -# GSplus configuration file version 0.14 +# GSport configuration file version 0.31 s5d1 = s5d2 = @@ -6,8 +6,9 @@ s5d2 = s6d1 = s6d2 = -s7d1 = /Users/jrand/Library/Developer/Xcode/DerivedData/abCalc-bpuqqdowxwsrymetcyxvfclvynre/Build/Products/Debug/abCalcNDA.2mg +s7d1 = +g_joystick_type = 0 g_limit_speed = 0 diff --git a/abCalc/make/createDiskImage b/abCalc/make/createDiskImage index d83e6a8..6680e90 100755 --- a/abCalc/make/createDiskImage +++ b/abCalc/make/createDiskImage @@ -1,120 +1,260 @@ #!/bin/sh - -MOUNTDIR=/tmp/a2gs_mount.$$ -TMPDISKIMAGE=/tmp/a2gs_diskimage_$$.2mg -TEMPLATEDISKIMAGE=make/system601.2mg - if [ $# -lt 3 ] then - echo USAGE: $0 diskimage file directory + echo USAGE: $0 diskimage bootimage file [bootdest] exit 1 fi DISKIMAGE="$1" shift +DESTBOOTIMAGE="$1" +shift + FILE="$1" shift -DISKIMAGEDEST="$1" -shift -DEST="${MOUNTDIR}/${DISKIMAGEDEST}" +BOOTCOPYPATH="$1" -COPYDIRS=$* +PROGRAM=`basename "$FILE"` +TMPDIR=/tmp/a2gs_mount.$$ +MOUNTDIR="${TMPDIR}/$PROGRAM" +TMPDISKIMAGE=/tmp/a2gs_diskimage_$$.2mg +TMPBOOTIMAGE=/tmp/a2gs_bootimage_$$.2mg +TMPARCHIVE=/tmp/s2gs_archive_$$.shk +TEMPLATEDISKIMAGE="make/empty.2mg" +TEMPLATEBOOTIMAGE="make/$BOOTIMAGE" +ARCHIVE=`dirname "$DISKIMAGE"`/"abCalc.shk" -cleanupAndExit() +# It looks like on Linux, the cp command needs a special argument to preserve the resource fork. This isn't ideal +# but for now, if uname is Darwin, then this is MacOS and we don't need any cp args. If not Darwin, then assume +# this is Linux and ask for extended attributes to be preserved through the copy. +# +# Ultimately, it could be that other platforms (BSD, does Solaris still exist?) or even other Linux versions or +# distributions need different arguments for this rather special thing. If true, this may need to be a build time +# option which can be set. +if [ "`uname`" = Darwin ] +then + CPARGS="" +else + CPARGS="--preserve=xattr" +fi + + +printErrorAndExit() { + echo "`pwd`/Makefile:0:0: error: $*" >&2 umount "$MOUNTDIR" 2> /dev/null rm -f "$TMPDISKIMAGE" 2> /dev/null + rm -f "$TMPBOOTIMAGE" 2> /dev/null + rm -f "$TMPARCHIVE" 2> /dev/null rm -f "$DISKIMAGE" 2> /dev/null - rmdir "$MOUNTDIR" 2> /dev/null + rm -f "$DESTBOOTIMAGE" 2> /dev/null + rm -rf "$TMPDIR" 2> /dev/null exit 1 } + +unmount() +{ + RETRIES=0 + while [ $RETRIES -lt 5 ] + do + umount "$1" + if [ $? -eq 0 ] + then + break + fi + + RETRIES=`expr $RETRIES + 1` + sleep 1 + done + + if [ $RETRIES -ge 5 ] + then + printErrorAndExit "Unable to unmount the disk image." + fi +} + + +validateProDOSName() +{ + NAME=`basename $1` + echo $NAME | egrep '^[a-zA-Z][a-zA-Z0-9.]{0,14}$' > /dev/null +} + + +mkdirProDOS() +{ + validateProDOSName "$1" + if [ $? -ne 0 ] + then + printErrorAndExit "Invalid ProDOS name of directory `basename $1`. ProDOS names must be 1 to 15 characters, start with a letter and only letters, numbers and a period can be used in the name." + fi + + mkdir -p "$1" + if [ $? -ne 0 ] + then + printErrorAndExit "Unable to create directory $1" + fi +} + + +cpProDOS() +{ + validateProDOSName "$2" + if [ $? -ne 0 ] + then + printErrorAndExit "Invalid ProDOS name of file `basename $2`. ProDOS names must be 1 to 15 characters, start with a letter and only letters, numbers and a period can be used in the name." + fi + + cp $CPARGS "$1" "$2" + if [ $? -ne 0 ] + then + printErrorAndExit "Unable to create directory $1" + fi +} + + +copyDirs() +{ + OLDDIR=`pwd` + for COPYDIR in $* + do + cd "$COPYDIR" + if [ $? != 0 ] + then + printErrorAndExit "Unable to find $COPYDIR" + fi + + find . -print | while read FILEORDIR + do + if [ "$FILEORDIR" = "." ] + then + continue + fi + if [ -d "$FILEORDIR" ] + then + mkdirProDOS "${MOUNTDIR}/$FILEORDIR" + elif [ -f "$FILEORDIR" ] + then + cpProDOS "$FILEORDIR" "${MOUNTDIR}/$FILEORDIR" + fi + done + cd "$OLDDIR" + done +} + + if [ ! -f "$TEMPLATEDISKIMAGE" ] then - echo Unable to find the template disk image, $TEMPLATEDISKIMAGE - cleanupAndExit + printErrorAndExit "Unable to find the template disk image, $TEMPLATEDISKIMAGE" fi -cp "$TEMPLATEDISKIMAGE" "$TMPDISKIMAGE" +if [ ! -f "$TEMPLATEBOOTIMAGE" ] +then + printErrorAndExit "Unable to find the template boot image, $TEMPLATEBOOTIMAGE" +fi + +mkdir "$TMPDIR" if [ $? != 0 ] then - echo Unable to copy template disk image. - cleanupAndExit + printErrorAndExit "Unable to create the mount directory." fi mkdir "$MOUNTDIR" if [ $? != 0 ] then - echo Unable to create the mount directory. - cleanupAndExit + printErrorAndExit "Unable to create the mount directory." +fi + +cp "$TEMPLATEBOOTIMAGE" "$TMPBOOTIMAGE" +if [ $? != 0 ] +then + printErrorAndExit "Unable to copy template boot image." +fi +if [ ! -z "$COPYBOOTDIRS" ] || [ ! -z "BOOTCOPYPATH" ] +then + profuse -orw "$TMPBOOTIMAGE" "$MOUNTDIR" + if [ $? != 0 ] + then + printErrorAndExit "Unable to mount the boot image." + fi + + if [ ! -z "$BOOTCOPYPATH" ] + then + cpProDOS "$FILE" "$MOUNTDIR/$BOOTCOPYPATH" + if [ $? != 0 ] + then + printErrorAndExit "Unable to copy the file to the boot image." + fi + fi + + copyDirs $COPYBOOTDIRS + + unmount "$MOUNTDIR" +fi + +cp "$TEMPLATEDISKIMAGE" "$TMPDISKIMAGE" +if [ $? != 0 ] +then + printErrorAndExit "Unable to copy template disk image." fi profuse -orw "$TMPDISKIMAGE" "$MOUNTDIR" if [ $? != 0 ] then - echo Unable to mount the disk image. - cleanupAndExit + printErrorAndExit "Unable to mount the disk image." fi -cp "$FILE" "$DEST" +cpProDOS "$FILE" "$MOUNTDIR" if [ $? != 0 ] then - echo Unable to copy the file to the disk image. - cleanupAndExit + printErrorAndExit "Unable to copy the file to the disk image." fi +# Special case for this project to copy the shell command to the distribution also. +SHELLFILE=`echo "$FILE" | sed 's/NDA$//'` +cpProDOS "$SHELLFILE" "$MOUNTDIR" +if [ $? != 0 ] +then + printErrorAndExit "Unable to copy the shell file to the disk image." +fi + +copyDirs $COPYDIRS + OLDDIR=`pwd` -for COPYDIR in $COPYDIRS -do - cd "$COPYDIR" - if [ $? != 0 ] - then - echo Unable to find $COPYDIR - cleanupAndExit - fi - - find . -print | while read FILEORDIR - do - if [ -d "$FILEORDIR" ] - then - mkdir -p "${MOUNTDIR}/$FILEORDIR" - elif [ -f "$FILEORDIR" ] - then - cp "$FILEORDIR" "${MOUNTDIR}/$FILEORDIR" - fi - done - cd "$OLDDIR" -done - -RETRIES=0 -while [ $RETRIES -lt 5 ] -do - umount "$MOUNTDIR" - if [ $? -eq 0 ] - then - break - fi - - RETRIES=`expr $RETRIES + 1` - sleep 1 -done - -if [ $RETRIES -ge 5 ] +cd "$TMPDIR" +$ORCA "$OLDDIR/make/tar" cf "$TMPARCHIVE" "$PROGRAM" +if [ $? != 0 ] then - echo Unable to unmount the disk image. - cleanupAndExit + printErrorAndExit "Unable to create archive." fi +cd "$OLDDIR" + +unmount "$MOUNTDIR" cp "$TMPDISKIMAGE" "$DISKIMAGE" if [ $? != 0 ] then - echo Unable to copy the disk image to the destination. - cleanupAndExit + printErrorAndExit "Unable to copy the disk image to the destination." +fi + +cp "$TMPBOOTIMAGE" "$DESTBOOTIMAGE" +if [ $? != 0 ] +then + printErrorAndExit "Unable to copy the boot image to the destination." +fi + +cp "$TMPARCHIVE" "$ARCHIVE" +if [ $? != 0 ] +then + printErrorAndExit "Unable to copy the archive to the destination." fi rm -f "$TMPDISKIMAGE" -rmdir "$MOUNTDIR" +rm -f "$TMPBOOTIMAGE" +rm -f "$TMPARCHIVE" +rm -rf "$TMPDIR" exit 0 diff --git a/abCalc/make/empty.2mg b/abCalc/make/empty.2mg new file mode 100644 index 0000000000000000000000000000000000000000..5e02058a4cabc832d63a2dc469fce43447926c63 GIT binary patch literal 819264 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 z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= a5P$##AOHafKmY;|fB*y_0D+f4;Qt5XKemtn literal 0 HcmV?d00001 diff --git a/abCalc/make/head.mk b/abCalc/make/head.mk index 20a1aca..b176c59 100644 --- a/abCalc/make/head.mk +++ b/abCalc/make/head.mk @@ -72,10 +72,40 @@ DESKTOP_RES_MODE=640 MESSAGE_CENTER=0 GSPLUS=/Applications/GSplus.app/Contents/MacOS/gsplus +GSPLUSARGS= GSPORT=/Applications/GSport/GSport.app/Contents/MacOS/GSport +GSPORTARGS= +MAME=/Applications/Ample.app/Contents/MacOS/mame64 +MAMELIB=$(HOME)/Library/Application Support/Ample +MAMEARGS=apple2gs -skip_gameinfo -speed 2 -mouse -window -resolution 1408x1056 -ramsize 4M -sl7 cffa202 export GSPLUS +export GSPLUSARGS export GSPORT +export GSPORTARGS +export MAME +export MAMELIB +export MAMEARGS + +ifneq (,$(wildcard $GSPLUS)) + EMULATOR=gsplus +else ifneq (,$(wildcard $MAME)) + EMULATOR=mame +else ifneq (,$(wildcard $GSPORT)) + EMULATOR=gsport +else + EMULATOR=gsplus +endif + +export EMULATOR + +BOOTIMAGE=system601.2mg +export BOOTIMAGE + +COPYDIRS= +export COPYDIRS +COPYBOOTDIRS= +export COPYBOOTDIRS XCODE_PATH=/Applications/Xcode.app XCODE_INFO=$(XCODE_PATH)/Contents/Info.plist @@ -90,6 +120,6 @@ XCODE_PLUGIN_COMPATIBILITY=DVTPlugInCompatibilityUUID all: $(MKDIR) $(OBJDIR) $(GENDIR) $(TARGETDIR) - @make gen - @make build + @make -f $(firstword $(MAKEFILE_LIST)) gen + @make -f $(firstword $(MAKEFILE_LIST)) build diff --git a/abCalc/make/launchEmulator b/abCalc/make/launchEmulator index e9e7086..2ee547b 100755 --- a/abCalc/make/launchEmulator +++ b/abCalc/make/launchEmulator @@ -1,18 +1,29 @@ #!/bin/sh -if [ ! -z "$GSPLUS" ] && [ -x "$GSPLUS" ] -then - EMULATORPATH="$GSPLUS" -elif [ ! -z "$GSPORT" ] && [ -x "$GSPORT" ] -then - EMULATORPATH="$GSPORT" -fi +TMPDIR="/tmp/a2gs_emulator.$$" -if [ -z "$EMULATORPATH" ] +cleanupAndExit() +{ + cd + if [ ! -z $PID ] + then + kill $PID 2> /dev/null + fi + rm -rf $TMPDIR + exit 0 +} + +createConfigTxt() +{ + mkdir "$TMPDIR" + sed "s:^s7d1 *=.*$:s7d1 = $BOOTIMAGE: +s:^s5d1 *=.*:s5d1 = $DISKIMAGE:" < make/config.txt > "$TMPDIR/config.txt" + +} + +if [ $# -ne 2 ] then - echo Unable to find GSplus or GSport at these locations. - echo " GSPLUS=$GSPLUS" - echo " GSPORT=$GSPORT" + echo USAGE $0: diskimage bootimage exit 1 fi @@ -22,15 +33,52 @@ then DISKIMAGE="$PWD/$DISKIMAGE" fi -cd make -sed -i "" "s:^s7d1 *=.*$:s7d1 = $DISKIMAGE:" config.txt +BOOTIMAGE="$2" +if echo $BOOTIMAGE | grep -v '^/' > /dev/null +then + BOOTIMAGE="$PWD/$BOOTIMAGE" +fi +case "$EMULATOR" in + gsplus) + EMULATORPATH="$GSPLUS" + EMULATORARGS="$GSPLUSARGS" + EMULATORDIR="$TMPDIR" + createConfigTxt + ;; + gsport) + EMULATORPATH="$GSPORT" + EMULATORARGS="$GSPORTARGS" + EMULATORDIR="$TMPDIR" + createConfigTxt + ;; + mame) + EMULATORPATH="$MAME" + EMULATORARGS="$MAMEARGS -hard1 "$BOOTIMAGE" -flop3 "$DISKIMAGE"" + EMULATORDIR="$MAMELIB" + ;; + *) + echo Invalid emulator specified, \"$EMULATOR\" + exit 1 + ;; +esac + +if [ ! -x "$EMULATORPATH" ] +then + echo Unable to find $EMULATOR at $EMULATORPATH + exit 1 +fi + +if [ ! -d "$EMULATORDIR" ] +then + echo Unable to find $EMULATOR library at $EMULATORDIR + exit 1 +fi + +cd "$EMULATORDIR" # This magic ensure that clicking stop in Xcode results in the emulator terminating. - -$EMULATORPATH & +"$EMULATORPATH" $EMULATORARGS & PID=$! -trap 'kill $PID' SIGTERM SIGINT SIGHUP EXIT +trap cleanupAndExit SIGTERM SIGINT SIGHUP EXIT wait - -exit 0 diff --git a/abCalc/make/md2teach b/abCalc/make/md2teach new file mode 100644 index 0000000000000000000000000000000000000000..d456eb5d71abd6fc05ae56a6cecef0cb8fb796c2 GIT binary patch literal 143578 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 o*Kaa /dev/null -$ORCA assemble $* keep="${BASENAME}" "${BASENAME}.s" +$ORCA assemble $* keep="${BASENAME}" "${BASENAME}.s" 2> $ERROUTPUT RESULT=$? popd > /dev/null +if [ -s $ERROUTPUT ] +then + RESULT=1 + awk ' + { + print $0 + } + + /^Error /{ + $1="" + $2="" + LINENO=$3 + $3="" + printf("%s/%s:%d:0: error: %s\n", PWD, FILE, LINENO, $0) + } + ' "PWD=`pwd`" "FILE=${BASENAME}.s" $ERROUTPUT +fi +rm -f $ERROUTPUT + if [ "$RESULT" -ne 0 ] then rm -f "$SRCROOTNAME" rm -f "$SRCMACROSNAME" rm -f "$SRCOBJNAME" + rm -f "$DESTROOTNAME" + rm -f "$DESTMACROSNAME" + rm -f "$DESTOBJNAME" + rm -f "$DESTDEPSNAME" + exit 1 fi mkdir -p `dirname "$DESTROOTNAME"` diff --git a/abCalc/make/system601.2mg b/abCalc/make/system601.2mg index 12d9c00cadbbcd7b2bd69ec1d4de0613386e6399..ff5588b1decd62e4bc68496333547a74fa0da6e5 100644 GIT binary patch delta 708 zcmW;ISyzk!0D$2ceV-UoDcOlqjHSq0S+g5t%f4jEu4F635W~U?P*4Oes^CN*U!$qk>ANGlL{EnZ<18P(?L!nMV!tS-?UTv6v;)Qb#>YS;lf! zu##0Yu$ncjWgY9;z(zLl@7HFwu$4x(v7H_4WEV~BW)FMW$9@iQkV72i2+bVj7{@t5 z3nw|nY0hw#bDZY_t+a8Gb}n(5D_rFo9dvS?8{DLeTihni9q!W2J?`^>9v7EnaUnnlC0T{o$O1N>|3@hF@!Kk2HE|E&Y9!r&Rn>1 z?H~9f9v9Df@84W173LUd4N7B)czNDn+pp@fFz;_|aZ#o{s40jgDl)x6hsHBO*cqwJ zc7+YmzWQkY&p&mA*<8u*=16{bI@yy>M#!gtfRI9lP{dH83}ZOOjG%;4VvJ-IWsIhr zI2DXxER~F7JQJ8m6_c1uHB(4XLoIboWg63&!Axc`n|kIjmj>oBp9L(WkwrAIm}Zu+ zlw~Yu1uJP`6{}gpTGp|i4Q%B9uT5-b3tQR7c6P9nU9_^BJ?v#4`#Hct4snoa7XzIm21bah?lY%!ImwTkR&jY%7$Ri%p!xNtJ mj5N=A!Ap91MIW!p@P@a%qo4PD;3J>-%oo1?NGHF2&;A2eR3ZNW diff --git a/abCalc/make/tail.mk b/abCalc/make/tail.mk index a1690d3..17286eb 100644 --- a/abCalc/make/tail.mk +++ b/abCalc/make/tail.mk @@ -6,10 +6,12 @@ export PATH := $(PATH):$(ORCA_BIN) CWD=$(shell pwd) -DISKIMAGE=$(TARGETDIR)/$(PGM).2mg +DISKIMAGE=$(TARGETDIR)/abCalc.2mg +ARCHIVE=$(TARGETDIR)/abCalc.shk +DESTBOOTIMAGE=$(TARGETDIR)/$(BOOTIMAGE) BUILDTARGET=$(DISKIMAGE) EXECTARGET=executeGUI -DISKIMAGEDEST=. +BOOTCOPYPATH= AUXTYPE= CFLAGS+=-i$(GENDIR) @@ -31,18 +33,18 @@ else ifeq ($(TARGETTYPE),desktop) REZFLAGS+=rez='-d MESSAGE_CENTER=$(MESSAGE_CENTER)' else ifeq ($(TARGETTYPE),cda) FILETYPE=cda - DISKIMAGEDEST=System/Desk.Accs + BOOTCOPYPATH=System/Desk.Accs else ifeq ($(TARGETTYPE),cdev) BINTARGET=$(TARGETDIR)/$(PGM).bin FILETYPE=199 - DISKIMAGEDEST=System/CDevs + BOOTCOPYPATH=System/CDevs REZFLAGS+=rez='-d BINTARGET="$(BINTARGET)"' else ifeq ($(TARGETTYPE),nba) FILETYPE=exe BUILDTARGET=$(TARGETDIR)/$(PGM) else ifeq ($(TARGETTYPE),nda) FILETYPE=nda - DISKIMAGEDEST=System/Desk.Accs + BOOTCOPYPATH=System/Desk.Accs else ifeq ($(TARGETTYPE),xcmd) FILETYPE=exe BUILDTARGET=$(TARGETDIR)/$(PGM) @@ -71,17 +73,22 @@ REZ_SRCS=$(patsubst $(GENDIR)/%, %, $(patsubst ./%, %, $(wildcard $(addsuffix /* REZ_DEPS=$(patsubst %.rez, $(OBJDIR)/%.rez.d, $(REZ_SRCS)) REZ_OBJS=$(patsubst %.rez, $(OBJDIR)/%.r, $(REZ_SRCS)) +TEACH_FILES=$(patsubst %.md, $(GENDIR)/Teach/%, $(MD_SRCS)) +ifneq ($(TEACH_FILES),) + COPYDIRS+=$(GENDIR)/Teach +endif + ifneq ($(firstword $(REZ_SRCS)), $(lastword $(REZ_SRCS))) $(error Only a single resource file supported, found $(REZ_SRCS)) endif -BUILD_OBJS=$(C_ROOTS) $(C_OBJS) $(ASM_ROOTS) +BUILD_OBJS=$(C_ROOTS) $(C_OBJS) $(ASM_ROOTS) $(TEACH_FILES) ifeq ($(BINTARGET),) BUILD_OBJS+=$(REZ_OBJS) endif BUILD_OBJS_NOSUFFIX=$(C_ROOTS:.root=) $(C_OBJS:.a=) $(ASM_ROOTS:.ROOT=) -ALL_OBJS=$(C_ROOTS:.root=.a) $(C_OBJS) $(ASM_OBJS) $(REZ_OBJS) +ALL_OBJS=$(C_ROOTS:.root=.a) $(C_OBJS) $(ASM_OBJS) $(REZ_OBJS) $(TEACH_FILES) ALL_ROOTS=$(C_ROOTS) $(C_OBJS:.a=.root) $(ASM_ROOTS) ALL_DEPS=$(C_DEPS) $(ASM_DEPS) $(REZ_DEPS) @@ -96,7 +103,7 @@ build: $(BUILDTARGET) gen: xcodefix xcodefix: - defaults write "$(ORCAM_PLUGIN_INFO)" $(XCODE_PLUGIN_COMPATIBILITY)s -array `defaults read "$(XCODE_INFO)" $(XCODE_PLUGIN_COMPATIBILITY)` || true + [ "`uname`" = Darwin ] && defaults write "$(ORCAM_PLUGIN_INFO)" $(XCODE_PLUGIN_COMPATIBILITY)s -array `defaults read "$(XCODE_INFO)" $(XCODE_PLUGIN_COMPATIBILITY)` || true clean: genclean $(RM) "$(TARGETDIR)/$(PGM)" $(BINTARGET) @@ -105,6 +112,8 @@ clean: genclean $(RM) $(ALL_DEPS) $(RM) $(ASM_MACROS) $(RM) "$(DISKIMAGE)" + $(RM) "$(DESTBOOTIMAGE)" + $(RM) "$(ARCHIVE)" createPackage: pkg/createPackage @@ -125,7 +134,7 @@ ifneq ($(REZ_OBJS),) $(RM) $(TARGETDIR)/$(PGM) $(CP) $(REZ_OBJS) $(TARGETDIR)/$(PGM) endif - cd $(OBJDIR); $(LINK) $(LDFLAGS) $(patsubst $(OBJDIR)/%, %, $(BUILD_OBJS_NOSUFFIX)) --keep=$(TARGETDIR)/$(PGM) + cd $(OBJDIR); $(LINK) $(LDFLAGS) $(patsubst $(OBJDIR)/%, %, $(BUILD_OBJS_NOSUFFIX)) keep="$(abspath $(TARGETDIR)/$(PGM))" $(CHTYP) -t $(FILETYPE) $(AUXTYPE) $(TARGETDIR)/$(PGM) endif @@ -154,7 +163,7 @@ else # resource compile will read the $(PGM).bin binary and load it into the # resources also. $(BINTARGET): $(BUILD_OBJS) - cd $(OBJDIR); $(LINK) $(LDFLAGS) $(patsubst $(OBJDIR)/%, %, $(BUILD_OBJS_NOSUFFIX)) --keep=$(BINTARGET) + cd $(OBJDIR); $(LINK) $(LDFLAGS) $(patsubst $(OBJDIR)/%, %, $(BUILD_OBJS_NOSUFFIX)) keep="$(abspath $(BINTARGET))" endif @@ -178,13 +187,13 @@ $(TARGETDIR)/$(PGM): $(REZ_OBJS) endif -$(DISKIMAGE): $(TARGETDIR)/$(PGM) - make/createDiskImage "$(DISKIMAGE)" "$(TARGETDIR)/$(PGM)" "$(DISKIMAGEDEST)" $(COPYDIRS) +$(DISKIMAGE): $(TARGETDIR)/$(PGM) make/empty.2mg make/$(BOOTIMAGE) + make/createDiskImage "$(DISKIMAGE)" $(DESTBOOTIMAGE) "$(TARGETDIR)/$(PGM)" $(BOOTCOPYPATH) execute: $(EXECTARGET) executeGUI: all - make/launchEmulator $(DISKIMAGE) + make/launchEmulator "$(DISKIMAGE)" "$(DESTBOOTIMAGE)" executeShell: all $(ORCA) $(TARGETDIR)/$(PGM) @@ -219,6 +228,10 @@ ifneq ($(RLINT_PATH),) $(ORCA) $(RLINT_PATH) $@ endif +$(GENDIR)/Teach/%: %.md + $(MKDIR) "$(GENDIR)/Teach" + $(ORCA) make/md2teach "$<" "$@" + $(OBJS): Makefile # Include the C and rez dependencies which were generated from the last build diff --git a/abCalc/make/tar b/abCalc/make/tar new file mode 100644 index 0000000000000000000000000000000000000000..3e14264d330ec8347fd75ccd1c4f9193f3e0bb2b GIT binary patch literal 43982 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 NtcE#|+e?2h{11xGAVdHF literal 0 HcmV?d00001 diff --git a/abCalc/nda.mk b/abCalc/nda.mk index 0ccc34e..d6c0796 100644 --- a/abCalc/nda.mk +++ b/abCalc/nda.mk @@ -28,9 +28,24 @@ PGM=abCalcNDA TARGETTYPE=nda # TARGETTYPE=xcmd +# Uncomment one of the following lines to force a particular GS emulator. +# By default, specific paths are tested for these emulators in the below +# order and the first found is what will be used. You can overrride that +# here: +# +# EMULATOR=gsplus +# EMULATOR=mame +# EMULATOR=gsport + +# By default, the build provides a single boot environment to test with. +# You can put other .2mg files into the make directory and override this +# variable to change what boot disk you want to use when you launch the +# emulator. The disk image you specify must be found in the make directory: +# +# BOOTIMAGE=system601.2mg + # Add any other directories where you are putting C or assembly source # files to this list: -# SRCDIRS+= SRCDIRS+=nda expr ops # If you put your main entry point for your project in a file called main.c @@ -66,7 +81,14 @@ LDFLAGS+= # Uncomment the following line if you want to build against the GNO libraries # export ORCA=$(ORCA_BINDIR)/gno -# If you want to copy one or more files or directories to the target disk +# Add any markdown files to the MD_SRCS variable to specify which files to +# convert to a Teach text file format during the build. Using this, you can +# write your documentation in markdown in your project and at build time, +# that documentation is converted to a format that is good to package with +# your software and can be opened on a GS. +MD_SRCS=abCalcHelp.md + +# If you want to copy one or more files or directories to the distribution disk # image, add the root directory to this variable. Any directories under # the source directory which don't exist in the target disk image will be # created. All files will be copied from the source to the target using @@ -74,23 +96,61 @@ LDFLAGS+= # # For example, if you set COPYDIRS to dir and in your project you have # the following files: +# dir/Icons/myIconFile +# dir/newDir/anotherFile +# Then, during the copy phase, myIconFile will be copied into the Icons +# folder and a folder newDir will be created and anotherFile will be copied +# into there. +COPYDIRS= + +# If you want to copy one or more files or directories to the boot disk +# image, add the root directory to this variable. Any directories under +# the source directory which don't exist in the boot disk image will be +# created. All files will be copied from the source to the target using +# the same path from the source. +# +# For example, if you set COPYBOOTDIRS to dir and in your project you have +# the following files: # dir/System/mySystemFile # dir/newDir/anotherFile # Then, during the copy phase, mySystemFile will be copied into the System # folder and a folder newDir will be created and anotherFile will be copied # into there. -COPYDIRS=copydir +COPYBOOTDIRS= # By default, the build expects that you have GSplus in the path: # /Applications/GSplus.app/Contents/MacOS/gsplus # If you have it in a different location, specify that here. # GSPLUS=/Applications/GSplus.app/Contents/MacOS/gsplus +# By default, the build uses no arguments with GSplus. If you would like to +# use different arguments, specify that here. +# GSPLUSARGS= + # By default, the build expects that you have GSport in the path: # /Applications/GSport/GSport.app/Contents/MacOS/GSport # If you have it in a different location, specify that here. # GSPORT=/Applications/GSport/GSport.app/Contents/MacOS/GSport +# By default, the build uses no arguments with GSport. If you would like to +# use different arguments, specify that here. +# GSPORTARGS= + +# By default, the build expects that you have Ample/mame in the path: +# /Applications/Ample.app/Contents/MacOS/mame64 +# If you have it in a different location, specify that here. +# MAME=/Applications/Ample.app/Contents/MacOS/mame64 + +# By default, the build expects that you have the mame ROMs/libs in the path: +# $(HOME)/Library/Application Support/Ample +# If you have it in a different location, specify that here. +# MAMELIB=$(HOME)/Library/Application Support/Ample + +# By default, the build uses these arguments with mame: +# apple2gs -skip_gameinfo -mouse -window -resolution 1408x1056 -ramsize 4M -sl7 cffa202 +# If you would like to use different arguments, specify that here. +# MAMEARGS=apple2gs -skip_gameinfo -speed 2 -mouse -window -resolution 1408x1056 -ramsize 4M -sl7 cffa202 + # For a desktop application, it can operate in 640x200 or 320x200 # resolution. This setting is used to define which horizontal # resolution you want to use for a desktop application. Other diff --git a/abCalc/shell.mk b/abCalc/shell.mk index e08a35c..ad38341 100644 --- a/abCalc/shell.mk +++ b/abCalc/shell.mk @@ -1,6 +1,6 @@ # # Makefile -# Apple //GS Build Engine for ORCA +# Apple //GS Build Engine for ORCA and Merlin # include make/head.mk @@ -12,13 +12,13 @@ include make/head.mk PGM=abCalc # Set the target type you would like to build. The options are: -# shell - A shell command for ORCA, GNO or other GS shell -# desktop - A full desktop application -# cda - A classic desk accessory -# cdev - A control panel device -# nba - A HyperStudio new button action -# nda - A new desk accessory -# xcmd - A HyperCard XCMD or XCFN +# shell - A shell command for ORCA, GNO or other GS shell +# desktop - A full desktop application +# cda - A classic desk accessory +# cdev - A control panel device +# nba - A HyperStudio new button action +# nda - A new desk accessory +# xcmd - A HyperCard XCMD or XCFN # TARGETTYPE=shell # TARGETTYPE=desktop @@ -28,9 +28,24 @@ TARGETTYPE=shell # TARGETTYPE=nda # TARGETTYPE=xcmd +# Uncomment one of the following lines to force a particular GS emulator. +# By default, specific paths are tested for these emulators in the below +# order and the first found is what will be used. You can overrride that +# here: +# +# EMULATOR=gsplus +# EMULATOR=mame +# EMULATOR=gsport + +# By default, the build provides a single boot environment to test with. +# You can put other .2mg files into the make directory and override this +# variable to change what boot disk you want to use when you launch the +# emulator. The disk image you specify must be found in the make directory: +# +# BOOTIMAGE=system601.2mg + # Add any other directories where you are putting C or assembly source # files to this list: -# SRCDIRS+= SRCDIRS+=shell expr ops # If you put your main entry point for your project in a file called main.c @@ -44,6 +59,13 @@ CFLAGS+=-dABCALC_GSOS # Add any arguments you want passed to the resource compiler to this variable: REZFLAGS+= +# Uncomment the following line if you have installed rlint as found here: +# https://github.com/ksherlock/rlint/releases +# Assuming that it is in the path that ORCA searches (the Utilities directory is +# probably a good choice), you can just leave the value unchanged. If you have +# put the rlint somewhere weird, you can set this to the correct path +# RLINT_PATH=rlint + # Add any arguments you want passed to the macro generator to this variable: MACGENFLAGS+= @@ -59,7 +81,14 @@ LDFLAGS+= # Uncomment the following line if you want to build against the GNO libraries # export ORCA=$(ORCA_BINDIR)/gno -# If you want to copy one or more files or directories to the target disk +# Add any markdown files to the MD_SRCS variable to specify which files to +# convert to a Teach text file format during the build. Using this, you can +# write your documentation in markdown in your project and at build time, +# that documentation is converted to a format that is good to package with +# your software and can be opened on a GS. +MD_SRCS= + +# If you want to copy one or more files or directories to the distribution disk # image, add the root directory to this variable. Any directories under # the source directory which don't exist in the target disk image will be # created. All files will be copied from the source to the target using @@ -67,27 +96,84 @@ LDFLAGS+= # # For example, if you set COPYDIRS to dir and in your project you have # the following files: +# dir/Icons/myIconFile +# dir/newDir/anotherFile +# Then, during the copy phase, myIconFile will be copied into the Icons +# folder and a folder newDir will be created and anotherFile will be copied +# into there. +COPYDIRS= + +# If you want to copy one or more files or directories to the boot disk +# image, add the root directory to this variable. Any directories under +# the source directory which don't exist in the boot disk image will be +# created. All files will be copied from the source to the target using +# the same path from the source. +# +# For example, if you set COPYBOOTDIRS to dir and in your project you have +# the following files: # dir/System/mySystemFile # dir/newDir/anotherFile # Then, during the copy phase, mySystemFile will be copied into the System # folder and a folder newDir will be created and anotherFile will be copied # into there. -COPYDIRS= +COPYBOOTDIRS= # By default, the build expects that you have GSplus in the path: -# /Applications/GSplus.app/Contents/MacOS/gsplus +# /Applications/GSplus.app/Contents/MacOS/gsplus # If you have it in a different location, specify that here. # GSPLUS=/Applications/GSplus.app/Contents/MacOS/gsplus +# By default, the build uses no arguments with GSplus. If you would like to +# use different arguments, specify that here. +# GSPLUSARGS= + # By default, the build expects that you have GSport in the path: -# /Applications/GSport/GSport.app/Contents/MacOS/GSport +# /Applications/GSport/GSport.app/Contents/MacOS/GSport # If you have it in a different location, specify that here. # GSPORT=/Applications/GSport/GSport.app/Contents/MacOS/GSport +# By default, the build uses no arguments with GSport. If you would like to +# use different arguments, specify that here. +# GSPORTARGS= + +# By default, the build expects that you have Ample/mame in the path: +# /Applications/Ample.app/Contents/MacOS/mame64 +# If you have it in a different location, specify that here. +# MAME=/Applications/Ample.app/Contents/MacOS/mame64 + +# By default, the build expects that you have the mame ROMs/libs in the path: +# $(HOME)/Library/Application Support/Ample +# If you have it in a different location, specify that here. +# MAMELIB=$(HOME)/Library/Application Support/Ample + +# By default, the build uses these arguments with mame: +# apple2gs -skip_gameinfo -mouse -window -resolution 1408x1056 -ramsize 4M -sl7 cffa202 +# If you would like to use different arguments, specify that here. +# MAMEARGS=apple2gs -skip_gameinfo -speed 2 -mouse -window -resolution 1408x1056 -ramsize 4M -sl7 cffa202 + +# For a desktop application, it can operate in 640x200 or 320x200 +# resolution. This setting is used to define which horizontal +# resolution you want to use for a desktop application. Other +# target types ignore this value. +# DESKTOP_RES_MODE=640 + +# For a desktop application, it can support opening and printing +# files based on paths sent to it by the message center. This +# option controls if that is or is not supported in the +# application (note: only the C desktop template supports message +# center today) +# MESSAGE_CENTER=0 + # Add any rules you want to execute before any compiles or assembly # commands are called here, if any. You can generate .c, .s or .h # files for example. You can generate data files. Whatever you -# might need. +# might need. You should generate these files in the $(GENDIR) +# directory or within a subdirectory under $(GENDIR) which you create +# yourself. +# +# All of your commands associated with a rule _must_ start with a tab +# character. Xcode makes it a bit tough to type a tab character by +# default. Press option-tab within Xcode to insert a tab character. gen: # For any files you generated in the gen target above, you should