TweetFollow Us on Twitter

Jan 91 Letters
Volume Number:7
Issue Number:1
Column Tag:Letters

A "Real" Database and Benchmarks

By Kirk Chase, Editor

A “Real” Database Comes to the Macintosh

Joseph S. Terry, Jr., President

Ajalon Corporation

Oxnard, CA

Developers in the Macintosh world are at a disadvantage. Programmers on other platforms have had a much greater choice of tools for a long time. Reading through MacTutor’s advertisers index one finds MACYACC from Abraxas Software. This tool is based on Yet-Another-Compiler-Compiler (YACC) from the UNIX world. YACC has proven itself over some 15 years to be an extremely valuable tool. I welcome it’s cousin on the Macintosh. Language Systems’ Fortran, a language where it can truly be said, “You had to be there!”. The “there” part was “in the beginning”. I welcome the “Old Man” or “Old Woman” of computer languages to the Mac.

Although I don’t want to endorse any particular product, we must realize that other platforms have a great deal to offer the Macintosh. Remember that those old guys and gals really DID know something.

It seems that some Mac programmers think that really “neat” programming only began in late ’81, continued through ’82 and ’83, and culminated in the release of the world’s FIRST computer in ’84: Macintosh!

I had hoped that the product I chose to debut as a serious quasi-horizontal Mac developer would be less controversial (and more polished) than it is. But, that is not to be.

The Mousehole Report of November 1990 contained a memo which raised some uncomfortable points about my new product, and I would like to set the record straight. Whenever we are driving and I say, “Should we go straight?”, my friend Kenneth from Oklahoma says, “Don’t go straight, go forward!”. As I go forward into the future, I would like to say to everyone who reads MacTutor, I am very glad to be here!

My partner, Adam R. Joyner, Chairman/CEO, and I have formed a company called Ajalon Corporation. We have become the exclusive resellers, support and developers of db_Vista III for the Macintosh from Raima Corporation of Bellevue, Washington. db_Vista III is a database system for C programmers composed of three main modules; db_Vista, db_Query and db_REVISE. db_Vista is the actual database engine. This engine is available for THINK C and MPW C currently. The source is available at a very reasonable price. Less than $1000.00 for a complete single user system with source included. We have plans for a HyperCard XCMD version, and similar “glue” for THINK PASCAL, MPW Object PASCAL (read MacApp) and, yes, FORTRAN.

db_Query is a complete report and query application based on a subset of SQL. With db_Query the user or programmer can perform arbitrarily complex queries using the english-like SQL language and store the information obtained in it’s new format.

db_REVISE allows the developer to reorganize the database. Add, change or delete files, fields, keys, compound keys, or sets and retain the data already in the database without cumbersome exporting and importing. Using an advanced Revision Description Language(RDL) data can be merged from different databases into a third hybrid, on the fly, under program control.

In the November 1990 Mousehole “Mikev” talked about db_Vista. He said “ ... I don’t recommend these products ...”, chilling, and further “ ... The source is just about worthless: it is largely uncommented, undocumented, and unstructured.”

Ok. one at a time. Yes, It is hard to recommend these products given the kind of neglect that the Macintosh version has been subjected to. The product had not been updated in over a year before Adam joined Raima in February ’90. Adam was their sole “Mac Guy” most recently. All the other db_Vista developers were bred in the UNIX and DOS worlds and knew very little about the orphaned Mac product. In their defense, Raima was justified in letting go of the Macintosh version . The UNIX and DOS database tools markets are TEN TIMES the size of the Mac marketplace and has been their bread and butter. Believe it. That’s THEIR focus, NOT ours. We are the Macintosh evangelist for db_Vista, if you will, and we think you would be amazed if you knew the whole truth. FACT: The db_Vista III development application doesn’t run well under MultiFinder. FIX: WaitNextEvent vs. GetNextEvent. FACT: To import data an application is sublaunched and then returns to the caller. FIX: Not necessary. It Works! It is a decidedly UNIX/DOS way of looking at the problem, but it works!.

We will be integrating these tools into the main application and providing more of the Macintosh “Advantage” as soon as we can, but don’t let that hold up serious development tasks. The basic database technology is solid and has YEARS of proven reliability in the PC and Unix world. Remember, one of db_Vista’s strengths is it’s cross platform portability, which supports DOS, Windows, Unix and VMS environments; an important feature in today’s heterogeneous development environments.

Adam and I are committed 110% to making all the right changes in the product to make it a contender for 1st place in the Mac developers heart. db_Vista is very fast. It was bred in a world where memory is precious. Therefore it simply opens its wings and soars on a Mac with One megabyte of memory. Try that with 4th Dimension.

Regarding technical support, yes, Raima did have problems with supporting the product. Throughout the history of the product they never allocated the resources or talent necessary to provide even adequate support to customers. We, on the other hand, are committed to superior technical support. This is critical when dealing with a product aimed at the developer community. Developers have a high degree of intelligence and need sophisticated support. They also have deadlines and can’t afford to waste time with wishy-washy responses. If a problem occurs we need to fix it. Immediately.

“ ... largely uncommented, undocumented, and unstructured ...”, Yes the source is large and not the prettiest. But, this is not a NEW database just released to the world. The Mac version just needs some special care that an experienced Mac/UNIX/DOS programmer can give before it will be humming. Raima didn’t understand the Mac or the 68000, but WE DO! Also, the source code was intended for customers who wanted to perform MAJOR changes to the basic db_Vista technology. Unfortunately, a lot of customers had to resort to using the source to debug problems in the db_Vista product. Now that we have the product WE will fix the problems, not the customer.

Besides, I wonder if “Mikev” has attended the developer classes that Raima holds each and every month all over the world. The Basics class, the Advanced class, and the Internals class. Each class is $300.00 per day. Two days for Basics, one for Advanced, and two for the Internals. This is a serious, relatively bug free and well respected database in the UNIX and DOS worlds. The Macintosh lags behind, but we intend to change that.

db_Vista has zero(0) user interface tools and that’s the way we like it. Use MacApp, THINK Class Library, AppMaker, Prototyper 3.0, HyperCard, SuperCard, or MacWorkStation to build the user interface. We will handle the database portion for you. db_Vista has powerful network model features that enable db_Vista to outperform nearly every other relational database, yet the relational database features are there for those times when it’s most appropriate.

db_Vista is a good tool. It was never brought over to the Mac with TLC. We will give the product that care, thought, and time. If you bought it, contact us and see the future. If you haven’t, then call us and “Let us show You”. (I love that line.)

Well, overall I couldn’t blame “Mikev”. Mac products need developers who care about the Mac, who understand it’s complexities and appreciate it’s simplicities. Adam and I feel that we can earn your support and your development dollars.

Joseph S. Terry, Jr.

President

Ajalon Corporation

HEADQUARTERS:

Ajalon Corporation

26210 Pacific Highway South

Suite 334

Kent, WA 98032

(206) 946-8178

Branch Office:

The Knowledge Konnection, a subsidiary of Ajalon Corporation

2073 N. Oxnard Blvd.

Suite 177

Oxnard, CA 93030

(805) 985-7761

Response to “Benchmark Challenge”

David T. Craig

Kansas City, MO

I would like to respond to the letter by Walt Davis and Steve Bayer (MT, Sept. 1990, p. 4+) titled “Benchmark Challenge”.

Note: Source code files accompanying this letter are located on MacTech CD-ROM or source code disks.

After compiling the Davis/Bayer IF-THEN-ELSE and CASE statement routines in MPW Pascal 3.0 I obtained the following execution time results:

When compared against the Macintosh II results in the letter obtained using the THINK Pascal 2.0 compiler MPW Pascal 3.0’s execution times are very similar. My complete source code for the MPW Pascal program are enclosed along with a listing of the generated assembly code. Note that the assembly code showed the IF-THEN-ELSE routine consisting of a sequence of comparisons. The CASE routine showed that MPW Pascal generates a lookup table containing the offsets of the CASE routines. I did not test MPW C 3.0 since I’m not a C programmer.

Davis and Bayer made an excellent statement in their letter about a topic which in my opinion has long been misunderstood by many programmers. They say “the relative speed of a high-level language depends on the assembly language produced by the compiler and not the high-level language itself.” As Davis and Bayer demonstrated, their THINK C code ran slower than their THINK Pascal code even tho everyone “knows” C is faster than Pascal. Niklaus Wirth, the designer of Pascal and Modula-2, stated many years ago that judgments upon the execution speed of computer languages are nonsense since it’s the implementation of the languages that is crucial in execution speed, not the language design. Wirth in the early days of Pascal (c. mid-1970) created a Pascal compiler at ETH, his Swiss university, that produced faster code than the university FORTRAN compiler. And everyone “knows” FORTRAN is faster than Pascal!

One last comment. Davis and Bayer’s source code should not use the Macintosh ROM call GetDateTime() for benchmarking purposes. This call returns the current system time in units of seconds. For benchmarking purposes they should use TickCount() which returns its time in 1/60 of a second, a finer granularity which is more accurate.

Listing:  ptest.make

#   File:       ptest.make
#   Target:     ptest
#   Sources:    ptest.p
#   Created:    Sunday, September 30, 1990 1:21:18 PM

ptest.p.o ƒ ptest.make ptest.p
  Pascal ptest.p

SOURCES = ptest.p
OBJECTS = ptest.p.o

ptest ƒƒ ptest.make {OBJECTS}
 Link -w -c ‘MPS ‘ -t MPST 
 {OBJECTS} 
 “{Libraries}”stubs.o 
 “{Libraries}”Runtime.o 
 “{Libraries}”Interface.o 
 “{PLibraries}”PasLib.o 
 “{PLibraries}”SANELib.o 
 “{Libraries}”ToolLibs.o 
 -o ptest
Listing:  ptest.p

{ MPW Pascal 3.0 program to test the execution speed of IF-THIN-ELSE 
}
{ and CASE statements.  Written from a discussion in MacTutor magazine 
}
{ (Sept. 1990, pp. 4-5). }
{ written by David T. Craig -- 30 Sept 1990 }
{ 9939 Locust, Apt. 4013, Kansas City, Missouri 64131 }

program p_tester;
USES
  MemTypes,   { Macintosh common types }
  OSIntf,     { Macintosh Operating System interface }
  ToolIntf,   { Macintosh ToolBox interface }
  Packages,   { Macintosh Package interface }
  SANE,       { Macintosh FP interface }
  PasLibIntf, { Pascal runtime libary interface }
  IntEnv,     { MPW integrated environment interface }
  CursorCtl;  { MPW shell cursor unit }

var global_b : integer;

{########################################################## }

{$s seg_ifthenelse}

procedure test_if_then_else (b: integer);

  const iteration_max = 1000000; { one million }
  
  var start_time,stop_time : longint;
      elapsed_secs         : real;
      i                    : longint;
  
  begin
    start_time := TickCount; { accurate to 1/60 of a second }
    
    for i := 1 to iteration_max do
      begin
        if b =  1 then begin end else
 if b =  2 then begin end else
 if b =  3 then begin end else
 if b =  4 then begin end else
 if b =  5 then begin end else
 if b =  6 then begin end else
 if b =  7 then begin end else
 if b =  8 then begin end else
 if b =  9 then begin end else
 if b = 10 then begin end else
 if b = 11 then begin end else
 if b = 12 then begin end else
 if b = 13 then begin end else
 if b = 14 then begin end else
 if b = 15 then begin end;
      end; { for i }
    
    stop_time := TickCount;
    
    elapsed_secs := (stop_time - start_time) / 60.0;
    
    WRITELN(‘  IF-THEN-ELSE Test [b=’,b:2,’] : ‘,elapsed_secs:0:3,’ seconds’);
  end;

{ ######################################################### }

{$s seg_case}
procedure test_case (b: integer);
  const iteration_max = 1000000; { one million }
  var start_time,stop_time : longint;
      elapsed_secs         : real;
      i                    : longint;
  begin
    start_time := TickCount; { accurate to 1/60 of a second }
    for i := 1 to iteration_max do
      begin
        case b of
    1 : begin end;
    2 : begin end;
    3 : begin end;
    4 : begin end;
    5 : begin end;
    6 : begin end;
    7 : begin end;
    8 : begin end;
    9 : begin end;
   10 : begin end;
   11 : begin end;
   12 : begin end;
   13 : begin end;
   14 : begin end;
   15 : begin end;
   
   otherwise begin end;
 end; { case b }
      end; { for i }
    
    stop_time := TickCount;
    
    elapsed_secs := (stop_time - start_time) / 60.0;
    
    WRITELN(‘  CASE Test time [b=’,b:2,’] : ‘,elapsed_secs:0:3,’ seconds’);
  end;

{ ######################################################### }

{$s Main}
begin { -- p_tester -- }

  PLSetVBuf(OUTPUT,NIL,_IOLBF,0); { Apple Macintosh MPW Shell system 
call }
  
  WRITELN(‘Starting the IF-THEN-ELSE Test ...’);
  WRITELN;
  
  for global_b := 1 to 20 do
    test_if_then_else(global_b);
  
  WRITELN;
  WRITELN(‘Starting the CASE Test ...’);
  WRITELN;
  
  for global_b := 1 to 20 do
    test_case(global_b);
  
  WRITELN;
  WRITELN(‘That’’s all folks ...’);
  
end.  { -- p_tester -- }

{ ########################################################################## 
}
{                                    finis                           
        }
{ ########################################################################## 
}

Listing: ptest.run

MPW pascal 3.0 run on a Macintosh II

Starting the IF-THEN-ELSE Test ...

  IF-THEN-ELSE Test [b= 1] :  1.883 seconds
  IF-THEN-ELSE Test [b= 2] :  2.517 seconds
  IF-THEN-ELSE Test [b= 3] :  3.150 seconds
  IF-THEN-ELSE Test [b= 4] :  3.800 seconds
  IF-THEN-ELSE Test [b= 5] :  4.467 seconds
  IF-THEN-ELSE Test [b= 6] :  5.117 seconds
  IF-THEN-ELSE Test [b= 7] :  5.767 seconds
  IF-THEN-ELSE Test [b= 8] :  6.417 seconds
  IF-THEN-ELSE Test [b= 9] :  7.067 seconds
  IF-THEN-ELSE Test [b=10] :  7.717 seconds
  IF-THEN-ELSE Test [b=11] :  8.367 seconds
  IF-THEN-ELSE Test [b=12] :  9.000 seconds
  IF-THEN-ELSE Test [b=13] :  9.650 seconds
  IF-THEN-ELSE Test [b=14] : 10.250 seconds
  IF-THEN-ELSE Test [b=15] : 10.233 seconds
  IF-THEN-ELSE Test [b=16] : 10.233 seconds
  IF-THEN-ELSE Test [b=17] : 10.250 seconds
  IF-THEN-ELSE Test [b=18] : 10.233 seconds
  IF-THEN-ELSE Test [b=19] : 10.233 seconds
  IF-THEN-ELSE Test [b=20] : 10.250 seconds

Starting the CASE Test ...

  CASE Test time [b= 1] : 3.950 seconds
  CASE Test time [b= 2] : 3.950 seconds
  CASE Test time [b= 3] : 3.950 seconds
  CASE Test time [b= 4] : 3.950 seconds
  CASE Test time [b= 5] : 3.950 seconds
  CASE Test time [b= 6] : 3.950 seconds
  CASE Test time [b= 7] : 3.950 seconds
  CASE Test time [b= 8] : 3.950 seconds
  CASE Test time [b= 9] : 3.967 seconds
  CASE Test time [b=10] : 3.950 seconds
  CASE Test time [b=11] : 3.950 seconds
  CASE Test time [b=12] : 3.950 seconds
  CASE Test time [b=13] : 3.950 seconds
  CASE Test time [b=14] : 3.950 seconds
  CASE Test time [b=15] : 3.950 seconds
  CASE Test time [b=16] : 2.583 seconds
  CASE Test time [b=17] : 2.583 seconds
  CASE Test time [b=18] : 2.583 seconds
  CASE Test time [b=19] : 2.583 seconds
  CASE Test time [b=20] : 2.583 seconds

That’s all folks ...

Listing: TEST_CASE

PROCEDURE: TEST_CASE
COMPILER : MPW Pascal 3.0
File: ptest, Resource 3, Type: CODE, Name: seg_case
Offset of first jump table entry: $00000070
Segment is $0000012E bytes long,
  and uses 1 jump table entry
00000000: 4E56 FFE2       ‘NV..’          LINK     A6,#$FFE2         
  
00000004: 48E7 0700       ‘H...’          MOVEM.L  D5-D7,-(A7)       
  
00000008: 42A7            ‘B.’            CLR.L    -(A7)             
  
0000000A: A975            ‘.u’            _TickCount                 
    ; A975
0000000C: 2C1F            ‘,.’            MOVE.L   (A7)+,D6          
  
0000000E: 7E01            ‘~.’            MOVEQ    #$01,D7           
  
00000010: 6038            ‘`8’            BRA.S    *+$003A           
  ; 0000004A
00000012: 302E 0008       ‘0...’          MOVE.W   $0008(A6),D0      
  
00000016: 5340            ‘S@’            SUBQ.W   #$1,D0            
  
00000018: 6B2E            ‘k.’            BMI.S    *+$0030           
  ; 00000048
0000001A: 0C40 000E       ‘.@..’          CMPI.W   #$000E,D0         
  
0000001E: 6E28            ‘n(‘            BGT.S    *+$002A           
  ; 00000048
00000020: D040            ‘.@’            ADD.W    D0,D0             
  
00000022: 303B 0006       ‘0;..’          MOVE.W   *+$0008(D0.W),D0  
  ; 0000002A
00000026: 4EFB 0000       ‘N...’          JMP      *+$0002(D0.W)     
  ; 00000028
0000002A: 0020 0020       ‘. . ‘          ORI.B    #$20,-(A0)        
  ; ‘ ‘
0000002E: 0020 0020       ‘. . ‘          ORI.B    #$20,-(A0)        
  ; ‘ ‘
00000032: 0020 0020       ‘. . ‘          ORI.B    #$20,-(A0)        
  ; ‘ ‘
00000036: 0020 0020       ‘. . ‘          ORI.B    #$20,-(A0)        
  ; ‘ ‘
0000003A: 0020 0020       ‘. . ‘          ORI.B    #$20,-(A0)        
  ; ‘ ‘
0000003E: 0020 0020       ‘. . ‘          ORI.B    #$20,-(A0)        
  ; ‘ ‘
00000042: 0020 0020       ‘. . ‘          ORI.B    #$20,-(A0)        
  ; ‘ ‘
00000046: 0020 5287       ‘. R.’          DC.W     $0020,$5287       
  ; ORI.B #$??87,-(A0)
0000004A: 0C87 000F 4240  ‘....B@’        CMPI.L   #$000F4240,D7     
  
00000050: 6FC0            ‘o.’            BLE.S    *-$003E           
  ; 00000012
00000052: 42A7            ‘B.’            CLR.L    -(A7)             
  
00000054: A975            ‘.u’            _TickCount                 
    ; A975
00000056: 2A1F            ‘*.’            MOVE.L   (A7)+,D5          
  
00000058: 2005            ‘ .’            MOVE.L   D5,D0             
  
0000005A: 9086            ‘..’            SUB.L    D6,D0             
  
0000005C: 2D40 FFE2       ‘-@..’          MOVE.L   D0,-$001E(A6)     
  
00000060: 486E FFE2       ‘Hn..’          PEA      -$001E(A6)        
  
00000064: 486E FFE6       ‘Hn..’          PEA      -$001A(A6)        
  
00000068: 3F3C 280E       ‘?<(.’          MOVE.W   #$280E,-(A7)      
  
0000006C: A9EB            ‘..’            _FP68K                     
  ; A9EB
0000006E: 487A 00B0       ‘Hz..’          PEA      *+$00B2           
  ; 00000120
00000072: 486E FFE6       ‘Hn..’          PEA      -$001A(A6)        
  
00000076: 3F3C 0006       ‘?<..’          MOVE.W   #$0006,-(A7)      
  
0000007A: A9EB            ‘..’            _FP68K                     
  ; A9EB
0000007C: 486E FFE6       ‘Hn..’          PEA      -$001A(A6)        
  
00000080: 486E FFF4       ‘Hn..’          PEA      -$000C(A6)        
  
00000084: 3F3C 1010       ‘?<..’          MOVE.W   #$1010,-(A7)      
  
00000088: A9EB            ‘..’            _FP68K                     
  ; A9EB
0000008A: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
0000008E: 487A 007A       ‘Hz.z’          PEA      *+$007C           
  ; 0000010A
00000092: 4267            ‘Bg’            CLR.W    -(A7)             
  
00000094: 4EAD 018A       ‘N...’          JSR      $018A(A5)         
  
00000098: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
0000009C: 302E 0008       ‘0...’          MOVE.W   $0008(A6),D0      
  
000000A0: 48C0            ‘H.’            EXT.L    D0                
  
000000A2: 2F00            ‘/.’            MOVE.L   D0,-(A7)          
  
000000A4: 3F3C 0002       ‘?<..’          MOVE.W   #$0002,-(A7)      
  
000000A8: 4EAD 0182       ‘N...’          JSR      $0182(A5)         
  
000000AC: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
000000B0: 487A 0052       ‘Hz.R’          PEA      *+$0054           
  ; 00000104
000000B4: 4267            ‘Bg’            CLR.W    -(A7)             
  
000000B6: 4EAD 018A       ‘N...’          JSR      $018A(A5)         
  
000000BA: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
000000BE: 486E FFF4       ‘Hn..’          PEA      -$000C(A6)        
  
000000C2: 2F3C 0003 0000  ‘/<....’        MOVE.L   #$00030000,-(A7)  
  
000000C8: 4EAD 0082       ‘N...’          JSR      $0082(A5)         
  
000000CC: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
000000D0: 487A 0028       ‘Hz.(‘          PEA      *+$002A           
  ; 000000FA
000000D4: 4267            ‘Bg’            CLR.W    -(A7)             
  
000000D6: 4EAD 018A       ‘N...’          JSR      $018A(A5)         
  
000000DA: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
000000DE: 4EAD 017A       ‘N..z’          JSR      $017A(A5)         
  
000000E2: 4CDF 00E0       ‘L...’          MOVEM.L  (A7)+,D5-D7       
  
000000E6: 4E5E            ‘N^’            UNLK     A6                
  
000000E8: 205F            ‘ _’            MOVEA.L  (A7)+,A0          
  
000000EA: 544F            ‘TO’            ADDQ.W   #$2,A7            
  
000000EC: 4ED0            ‘N.’            JMP      (A0)              
  
000000EE: 8954            ‘.T’            OR.W     D4,(A4)           
  
000000F0: 4553            ‘ES’            DC.W     $4553             
  ; ????
000000F2: 545F            ‘T_’            ADDQ.W   #$2,(A7)+         
  
000000F4: 4341            ‘CA’            DC.W     $4341             
  ; ????
000000F6: 5345            ‘SE’            SUBQ.W   #$1,D5            
  
000000F8: 0030            ‘.0’            DC.W     $0030             
  ; ????
000000FA: 0820 7365       ‘. se’          DC.W     $0820,$7365       
  ; BTST #$??65,-(A0)
000000FE: 636F            ‘co’            BLS.S    *+$0071           
  ; 0000016F
00000100: 6E64            ‘nd’            BGT.S    *+$0066           
  ; 00000166
00000102: 7300            ‘s.’            DC.W     $7300             
  ; ????
00000104: 045D 203A       ‘.] :’          SUBI.W   #$203A,(A5)+      
  ; ‘ :’
00000108: 2000            ‘ .’            MOVE.L   D0,D0             
  
0000010A: 1420            ‘. ‘            MOVE.B   -(A0),D2          
  
0000010C: 2043            ‘ C’            MOVEA.L  D3,A0             
  
0000010E: 4153            ‘AS’            DC.W     $4153             
  ; ????
00000110: 4520            ‘E ‘            CHK.L    -(A0),D2          
  
00000112: 5465            ‘Te’            ADDQ.W   #$2,-(A5)         
  
00000114: 7374            ‘st’            DC.W     $7374             
  ; ????
00000116: 2074            ‘ t’            DC.W     $2074             
  ; ????
00000118: 696D            ‘im’            BVS.S    *+$006F           
  ; 00000187
0000011A: 6520            ‘e ‘            BCS.S    *+$0022           
  ; 0000013C
0000011C: 5B62            ‘[b’            SUBQ.W   #$5,-(A2)         
  
0000011E: 3D00            ‘=.’            MOVE.W   D0,-(A6)          
  
00000120: 4004            ‘@.’            NEGX.B   D4                
  
00000122: F000            ‘..’            DC.W     $F000             
  ; ????
00000124: 0000 0000       ‘....’          ORI.B    #$00,D0           
  
00000128: 0000 2020       ‘..  ‘          DC.W     $0000,$2020       
  ; ORI.B #$??20,D0

FINIS

Listing: TEST_IF_THEN_ELSE

PROCEDURE: TEST_IF_THEN_ELSE
COMPILER : MPW Pascal 3.0

File: ptest, Resource 2, Type: CODE, Name: seg_ifthenelse
Offset of first jump table entry: $00000068
Segment is $00000178 bytes long,
  and uses 1 jump table entry
00000000: 4E56 FFE2       ‘NV..’          LINK     A6,#$FFE2         
  
00000004: 48E7 0F00       ‘H...’          MOVEM.L  D4-D7,-(A7)       
  
00000008: 3E2E 0008       ‘>...’          MOVE.W   $0008(A6),D7      
  
0000000C: 42A7            ‘B.’            CLR.L    -(A7)             
  
0000000E: A975            ‘.u’            _TickCount                 
    ; A975
00000010: 2A1F            ‘*.’            MOVE.L   (A7)+,D5          
  
00000012: 7C01            ‘|.’            MOVEQ    #$01,D6           
  
00000014: 6076            ‘`v’            BRA.S    *+$0078           
  ; 0000008C
00000016: 7001            ‘p.’            MOVEQ    #$01,D0           
  
00000018: B047            ‘.G’            CMP.W    D7,D0             
  
0000001A: 6602            ‘f.’            BNE.S    *+$0004           
  ; 0000001E
0000001C: 606C            ‘`l’            BRA.S    *+$006E           
  ; 0000008A
0000001E: 7002            ‘p.’            MOVEQ    #$02,D0           
  
00000020: B047            ‘.G’            CMP.W    D7,D0             
  
00000022: 6602            ‘f.’            BNE.S    *+$0004           
  ; 00000026
00000024: 6064            ‘`d’            BRA.S    *+$0066           
  ; 0000008A
00000026: 7003            ‘p.’            MOVEQ    #$03,D0           
  
00000028: B047            ‘.G’            CMP.W    D7,D0             
  
0000002A: 6602            ‘f.’            BNE.S    *+$0004           
  ; 0000002E
0000002C: 605C            ‘`\’            BRA.S    *+$005E           
  ; 0000008A
0000002E: 7004            ‘p.’            MOVEQ    #$04,D0           
  
00000030: B047            ‘.G’            CMP.W    D7,D0             
  
00000032: 6602            ‘f.’            BNE.S    *+$0004           
  ; 00000036
00000034: 6054            ‘`T’            BRA.S    *+$0056           
  ; 0000008A
00000036: 7005            ‘p.’            MOVEQ    #$05,D0           
  
00000038: B047            ‘.G’            CMP.W    D7,D0             
  
0000003A: 6602            ‘f.’            BNE.S    *+$0004           
  ; 0000003E
0000003C: 604C            ‘`L’            BRA.S    *+$004E           
  ; 0000008A
0000003E: 7006            ‘p.’            MOVEQ    #$06,D0           
  
00000040: B047            ‘.G’            CMP.W    D7,D0             
  
00000042: 6602            ‘f.’            BNE.S    *+$0004           
  ; 00000046
00000044: 6044            ‘`D’            BRA.S    *+$0046           
  ; 0000008A
00000046: 7007            ‘p.’            MOVEQ    #$07,D0           
  
00000048: B047            ‘.G’            CMP.W    D7,D0             
  
0000004A: 6602            ‘f.’            BNE.S    *+$0004           
  ; 0000004E
0000004C: 603C            ‘`<‘            BRA.S    *+$003E           
  ; 0000008A
0000004E: 7008            ‘p.’            MOVEQ    #$08,D0           
  
00000050: B047            ‘.G’            CMP.W    D7,D0             
  
00000052: 6602            ‘f.’            BNE.S    *+$0004           
  ; 00000056
00000054: 6034            ‘`4’            BRA.S    *+$0036           
  ; 0000008A
00000056: 7009            ‘p.’            MOVEQ    #$09,D0           
  
00000058: B047            ‘.G’            CMP.W    D7,D0             
  
0000005A: 6602            ‘f.’            BNE.S    *+$0004           
  ; 0000005E
0000005C: 602C            ‘`,’            BRA.S    *+$002E           
  ; 0000008A
0000005E: 700A            ‘p.’            MOVEQ    #$0A,D0           
  
00000060: B047            ‘.G’            CMP.W    D7,D0             
  
00000062: 6602            ‘f.’            BNE.S    *+$0004           
  ; 00000066
00000064: 6024            ‘`$’            BRA.S    *+$0026           
  ; 0000008A
00000066: 700B            ‘p.’            MOVEQ    #$0B,D0           
  
00000068: B047            ‘.G’            CMP.W    D7,D0             
  
0000006A: 6602            ‘f.’            BNE.S    *+$0004           
  ; 0000006E
0000006C: 601C            ‘`.’            BRA.S    *+$001E           
  ; 0000008A
0000006E: 700C            ‘p.’            MOVEQ    #$0C,D0           
  
00000070: B047            ‘.G’            CMP.W    D7,D0             
  
00000072: 6602            ‘f.’            BNE.S    *+$0004           
  ; 00000076
00000074: 6014            ‘`.’            BRA.S    *+$0016           
  ; 0000008A
00000076: 700D            ‘p.’            MOVEQ    #$0D,D0           
  
00000078: B047            ‘.G’            CMP.W    D7,D0             
  
0000007A: 6602            ‘f.’            BNE.S    *+$0004           
  ; 0000007E
0000007C: 600C            ‘`.’            BRA.S    *+$000E           
  ; 0000008A
0000007E: 700E            ‘p.’            MOVEQ    #$0E,D0           
  
00000080: B047            ‘.G’            CMP.W    D7,D0             
  
00000082: 6602            ‘f.’            BNE.S    *+$0004           
  ; 00000086
00000084: 6004            ‘`.’            BRA.S    *+$0006           
  ; 0000008A
00000086: 700F            ‘p.’            MOVEQ    #$0F,D0           
  
00000088: B047            ‘.G’            CMP.W    D7,D0             
  
0000008A: 5286            ‘R.’            ADDQ.L   #$1,D6            
  
0000008C: 0C86 000F 4240  ‘....B@’        CMPI.L   #$000F4240,D6     
  
00000092: 6F82            ‘o.’            BLE.S    *-$007C           
  ; 00000016
00000094: 42A7            ‘B.’            CLR.L    -(A7)             
  
00000096: A975            ‘.u’            _TickCount                 
    ; A975
00000098: 281F            ‘(.’            MOVE.L   (A7)+,D4          
  
0000009A: 2004            ‘ .’            MOVE.L   D4,D0             
  
0000009C: 9085            ‘..’            SUB.L    D5,D0             
  
0000009E: 2D40 FFE2       ‘-@..’          MOVE.L   D0,-$001E(A6)     
  
000000A2: 486E FFE2       ‘Hn..’          PEA      -$001E(A6)        
  
000000A6: 486E FFE6       ‘Hn..’          PEA      -$001A(A6)        
  
000000AA: 3F3C 280E       ‘?<(.’          MOVE.W   #$280E,-(A7)      
  
000000AE: A9EB            ‘..’            _FP68K                     
  ; A9EB
000000B0: 487A 00B8       ‘Hz..’          PEA      *+$00BA           
  ; 0000016A
000000B4: 486E FFE6       ‘Hn..’          PEA      -$001A(A6)        
  
000000B8: 3F3C 0006       ‘?<..’          MOVE.W   #$0006,-(A7)      
  
000000BC: A9EB            ‘..’            _FP68K                     
  ; A9EB
000000BE: 486E FFE6       ‘Hn..’          PEA      -$001A(A6)        
  
000000C2: 486E FFF4       ‘Hn..’          PEA      -$000C(A6)        
  
000000C6: 3F3C 1010       ‘?<..’          MOVE.W   #$1010,-(A7)      
  
000000CA: A9EB            ‘..’            _FP68K                     
  ; A9EB
000000CC: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
000000D0: 487A 0080       ‘Hz..’          PEA      *+$0082           
  ; 00000152
000000D4: 4267            ‘Bg’            CLR.W    -(A7)             
  
000000D6: 4EAD 018A       ‘N...’          JSR      $018A(A5)         
  
000000DA: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
000000DE: 3007            ‘0.’            MOVE.W   D7,D0             
  
000000E0: 48C0            ‘H.’            EXT.L    D0                
  
000000E2: 2F00            ‘/.’            MOVE.L   D0,-(A7)          
  
000000E4: 3F3C 0002       ‘?<..’          MOVE.W   #$0002,-(A7)      
  
000000E8: 4EAD 0182       ‘N...’          JSR      $0182(A5)         
  
000000EC: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
000000F0: 487A 005A       ‘Hz.Z’          PEA      *+$005C           
  ; 0000014C
000000F4: 4267            ‘Bg’            CLR.W    -(A7)             
  
000000F6: 4EAD 018A       ‘N...’          JSR      $018A(A5)         
  
000000FA: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
000000FE: 486E FFF4       ‘Hn..’          PEA      -$000C(A6)        
  
00000102: 2F3C 0003 0000  ‘/<....’        MOVE.L   #$00030000,-(A7)  
  
00000108: 4EAD 0082       ‘N...’          JSR      $0082(A5)         
  
0000010C: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
00000110: 487A 0030       ‘Hz.0’          PEA      *+$0032           
  ; 00000142
00000114: 4267            ‘Bg’            CLR.W    -(A7)             
  
00000116: 4EAD 018A       ‘N...’          JSR      $018A(A5)         
  
0000011A: 486D FDE4       ‘Hm..’          PEA      -$021C(A5)        
  
0000011E: 4EAD 017A       ‘N..z’          JSR      $017A(A5)         
  
00000122: 4CDF 00F0       ‘L...’          MOVEM.L  (A7)+,D4-D7       
  
00000126: 4E5E            ‘N^’            UNLK     A6                
  
00000128: 205F            ‘ _’            MOVEA.L  (A7)+,A0          
  
0000012A: 544F            ‘TO’            ADDQ.W   #$2,A7            
  
0000012C: 4ED0            ‘N.’            JMP      (A0)              
  
0000012E: 9154            ‘.T’            SUB.W    D0,(A4)           
  
00000130: 4553            ‘ES’            DC.W     $4553             
  ; ????
00000132: 545F            ‘T_’            ADDQ.W   #$2,(A7)+         
  
00000134: 4946            ‘IF’            DC.W     $4946             
  ; ????
00000136: 5F54            ‘_T’            SUBQ.W   #$7,(A4)          
  
00000138: 4845            ‘HE’            SWAP     D5                
  
0000013A: 4E5F            ‘N_’            UNLK     A7                
  
0000013C: 454C            ‘EL’            DC.W     $454C             
  ; ????
0000013E: 5345            ‘SE’            SUBQ.W   #$1,D5            
  
00000140: 0032            ‘.2’            DC.W     $0032             
  ; ????
00000142: 0820 7365       ‘. se’          DC.W     $0820,$7365       
  ; BTST #$??65,-(A0)
00000146: 636F            ‘co’            BLS.S    *+$0071           
  ; 000001B7
00000148: 6E64            ‘nd’            BGT.S    *+$0066           
  ; 000001AE
0000014A: 7300            ‘s.’            DC.W     $7300             
  ; ????
0000014C: 045D 203A       ‘.] :’          SUBI.W   #$203A,(A5)+      
  ; ‘ :’
00000150: 2000            ‘ .’            MOVE.L   D0,D0             
  
00000152: 1720            ‘. ‘            MOVE.B   -(A0),-(A3)       
  
00000154: 2049            ‘ I’            MOVEA.L  A1,A0             
  
00000156: 462D 5448       ‘F-TH’          NOT.B    $5448(A5)         
  
0000015A: 454E            ‘EN’            DC.W     $454E             
  ; ????
0000015C: 2D45 4C53       ‘-ELS’          MOVE.L   D5,$4C53(A6)      
  
00000160: 4520            ‘E ‘            CHK.L    -(A0),D2          
  
00000162: 5465            ‘Te’            ADDQ.W   #$2,-(A5)         
  
00000164: 7374            ‘st’            DC.W     $7374             
  ; ????
00000166: 205B            ‘ [‘            MOVEA.L  (A3)+,A0          
  
00000168: 623D            ‘b=’            BHI.S    *+$003F           
  ; 000001A7
0000016A: 4004            ‘@.’            NEGX.B   D4                
  
0000016C: F000            ‘..’            DC.W     $F000             
  ; ????
0000016E: 0000 0000       ‘....’          ORI.B    #$00,D0           
  
00000172: 0000 4600       ‘..F.’          DC.W     $0000,$4600       
  ; ORI.B #$??00,D0

FINIS

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Dropbox 37.4.29 - Cloud backup and synch...
Dropbox is an application that creates a special Finder folder that automatically syncs online and between your computers. It allows you to both backup files and keep them up-to-date between systems... Read more
iClock Pro 3.8 - Customize your menubar...
iClock Pro is a menu-bar replacement for Apple's default clock. iClock Pro is an update, total rewrite, and improvement to the popular iClock. Have the day, date, and time in different fonts and... Read more
A Better Finder Attributes 6.06 - Change...
A Better Finder Attributes is the ultimate file-tweaking tool for OS X. It combines photo-shooting date and file date changing along with a few unique tricks of its own. Change EXIF Timestamps at... Read more
Chromium 62.0.3202.62 - Fast and stable...
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all Internet users to experience the web. Version 62.0.3202.62: High CVE-2017-5124: UXSS with... Read more
Things 3.2.1 - Elegant personal task man...
Things is a task management solution that helps to organize your tasks in an elegant and intuitive way. Things combines powerful features with simplicity through the use of tags and its intelligent... Read more
MacCleanse 6.0.5 - $29.95
MacCleanse is the product of thousands of hours of intense research and development. It meticulously scans all of the nooks and crannies of a computer for unnecessary junk that can take up huge... Read more
Fantastical 2.4.3 - Create calendar even...
Fantastical 2 is the Mac calendar you'll actually enjoy using. Creating an event with Fantastical is quick, easy, and fun: Open Fantastical with a single click or keystroke Type in your event... Read more
Google Chrome 62.0.3202.62 - Modern and...
Google Chrome is a Web browser by Google, created to be a modern platform for Web pages and applications. It utilizes very fast loading of Web pages and has a V8 engine, which is a custom built... Read more
VirtualBox 5.2.0 - x86 virtualization so...
VirtualBox is a family of powerful x86 virtualization products for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers... Read more
iClock Pro 3.8 - Customize your menubar...
iClock Pro is a menu-bar replacement for Apple's default clock. iClock Pro is an update, total rewrite, and improvement to the popular iClock. Have the day, date, and time in different fonts and... Read more

Warhammer Quest 2 (Games)
Warhammer Quest 2 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Dungeon adventures in the Warhammer World are back! | Read more »
4 of the best Halloween updates for mobi...
Halloween is certainly one of our favorite times for mobile game updates. Many popular titles celebrate this spooky season with fun festivities that can stretch from one week to even the whole month. As we draw closer and closer to Halloween, we'... | Read more »
Fire Rides guide - how to swing to succe...
It's another day, which means another Voodoo game has come to glue our hands to our mobile phones. Yes, it's been an especially prolific month for this particular mobile publisher, but we're certainly not complaining. Fire Rides is yet another... | Read more »
Time Recoil (Games)
Time Recoil 1.0.1 Device: iOS Universal Category: Games Price: $3.99, Version: 1.0.1 (iTunes) Description: Time Recoil is a top-down shooter where you kill to slow time, dominate slow motion gunfights, and trigger devastating special... | Read more »
Campfire Cooking (Games)
Campfire Cooking 1.0 Device: iOS Universal Category: Games Price: $3.99, Version: 1.0 (iTunes) Description: | Read more »
Returner 77 (Games)
Returner 77 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Returner 77 is a cinematic space mystery puzzle game. You are in a giant alien spaceship hovering above Earth, after everything... | Read more »
Dune! guide - how to toe the line and ge...
Publisher Voodoo is at it again with an all new high score chaser -- Dune! In this fast-paced arcade game, you have to propel yourself along sand dunes, gaining enough momentum to jump above the line to score points, while making sure you have... | Read more »
The best deals on the App Store this wee...
Happy Tuesday, dear readers. Your favorite part of the week as officially arrived. It's time to take a look at the best deals in games. Things are admittedly a bit sparse, but there are a few diamonds in the rough to see you through if you're... | Read more »
Be the last person standing in Legacy of...
Yoozoo Games’ popular action MMO Legacy of Discord is getting a huge new update to celebrate its first anniversary. Perhaps the biggest change is the addition of an exciting survival mode titled Last Guardian. This new survival mode will pit you... | Read more »
Home Street guide - how to make friends...
From the creators of Food Street comes Home Street, a new simulation game that tasks you with building a social network and designing a beautiful home. It's a bit like The Sims, but you won't have to worry about the daily chores involved (feeding,... | Read more »

Price Scanner via MacPrices.net

13″ MacBook Pros on sale for up to $120 off M...
B&H Photo has 2017 13″ MacBook Pros in stock today and on sale for up to $120 off MSRP, each including free shipping plus NY & NJ sales tax only: – 13-inch 2.3GHz/128GB Space Gray MacBook... Read more
15″ MacBook Pros on sale for up to $200 off M...
B&H Photo has 15″ MacBook Pros on sale for up to $200 off MSRP. Shipping is free, and B&H charges sales tax in NY & NJ only: – 15″ 2.8GHz MacBook Pro Space Gray (MPTR2LL/A): $2249, $150... Read more
Roundup of Apple Certified Refurbished iMacs,...
Apple has a full line of Certified Refurbished 2017 21″ and 27″ iMacs available starting at $1019 and ranging up to $350 off original MSRP. Apple’s one-year warranty is standard, and shipping is free... Read more
Sale! 27″ 3.8GHz 5K iMac for $2098, save $201...
Amazon has the 27″ 3.8GHz 5K iMac (MNED2LL/A) on sale today for $2098 including free shipping. Their price is $201 off MSRP, and it’s the lowest price available for this model (Apple’s $1949... Read more
Sale! 10″ Apple WiFi iPad Pros for up to $100...
B&H Photo has 10.5″ WiFi iPad Pros in stock today and on sale for $50-$100 off MSRP. Each iPad includes free shipping, and B&H charges sales tax in NY & NJ only: – 10.5″ 64GB iPad Pro: $... Read more
Apple iMacs on sale for up to $130 off MSRP w...
B&H Photo has 21-inch and 27-inch iMacs in stock and on sale for up to $130 off MSRP including free shipping. B&H charges sales tax in NY & NJ only: – 27″ 3.8GHz iMac (MNED2LL/A): $2179 $... Read more
2017 3.5GHz 6-Core Mac Pro on sale for $2799,...
B&H Photo has the 2017 3.5GHz 6-Core Mac Pro (MD878LL/A) on sale today for $2799 including free shipping plus NY & NJ sales tax only . Their price is $200 off MSRP. Read more
12″ 1.2GHz Space Gray MacBook on sale for $11...
Amazon has the 2017 12″ 1.2GHz Space Gray Retina MacBook on sale for $100 off MSRP. Shipping is free: 12″ 1.2GHz Space Gray MacBook: $1199.99 $100 off MSRP Read more
Bare Bones Software Releases macOS High Sierr...
Bare Bones Software has announced the release and immediate availability of BBEdit 12.0, a significant upgrade to its professional strength text and code editor. BBEdit 12 introduces a new foundation... Read more
Yale Announces Availability of Apple HomeKit-...
Yale Locks & Hardware has announced that Apple HomeKit support for its Assure Lock family is available this month. The new Yale iM1 Network Module, which provides support for the Apple Home app... Read more

Jobs Board

Frameworks Engineer, *Apple* Watch - Apple...
Job Summary Join the team that is shaping the future of software development for Apple Watch! As a software engineer on the Apple Watch Frameworks team you will Read more
*Apple* News Product Marketing Mgr., Publish...
Job Summary The Apple News Product Marketing Manager will work closely with a cross-functional group to assist in defining and marketing new features and services. Read more
Fraud Analyst, *Apple* Advertising Platform...
Job Summary Apple Ad Platforms has an opportunity to redefine advertising on mobile devices. Apple reaches hundreds of millions of iPhone, iPod touch, and iPad Read more
*Apple* Information Security - Security Data...
Job Summary This role is responsible for helping to strengthen Apple 's information security posture through the identification and curation of security event data. Read more
Lead *Apple* Solution Consultant - Apple In...
…develop a team of diverse partner employees focusing on excellence to deliver the Apple story. Even when you're not present, you will maintain a consistent influence Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.