diff --git a/.DS_Store b/.DS_Store index 4dec4da..28b10a2 100644 Binary files a/.DS_Store and b/.DS_Store differ 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 2f9c2a7..55bdeea 100644 Binary files a/abCalc.xcodeproj/project.xcworkspace/xcuserdata/jrand.xcuserdatad/UserInterfaceState.xcuserstate and b/abCalc.xcodeproj/project.xcworkspace/xcuserdata/jrand.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/abCalc.xcodeproj/xcshareddata/xcschemes/abCalc.xcscheme b/abCalc.xcodeproj/xcshareddata/xcschemes/abCalc.xcscheme index 4b6f397..8582ef4 100644 --- a/abCalc.xcodeproj/xcshareddata/xcschemes/abCalc.xcscheme +++ b/abCalc.xcodeproj/xcshareddata/xcschemes/abCalc.xcscheme @@ -61,7 +61,7 @@ isEnabled = "YES"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 0000000..5e02058 Binary files /dev/null and b/abCalc/make/empty.2mg differ 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 0000000..d456eb5 Binary files /dev/null and b/abCalc/make/md2teach differ diff --git a/abCalc/make/orca-asm b/abCalc/make/orca-asm index 43f0cc4..ed41452 100755 --- a/abCalc/make/orca-asm +++ b/abCalc/make/orca-asm @@ -1,6 +1,7 @@ #!/bin/bash TMPFILE=/tmp/orca-macgen.$$ +ERROUTPUT=/tmp/orca-asm-errs.$$ FILENAME="$1" shift @@ -54,15 +55,39 @@ DIRNAME=`dirname $FILENAME` BASENAME=`basename $FILENAME .s` pushd "$DIRNAME" > /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 12d9c00..ff5588b 100644 Binary files a/abCalc/make/system601.2mg and b/abCalc/make/system601.2mg differ 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 0000000..3e14264 Binary files /dev/null and b/abCalc/make/tar differ 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