TweetFollow Us on Twitter

Sep 85 Mousehole
Volume Number:1
Issue Number:10
Column Tag:Mousehole Letters

Mousehole Report, Letters

By Rusty Hodge, Sys Op & Contributing Editor, Mousehole BBS

Program bombs Lisp

MICRO GHOUL

I have been having a problem with a consistent bomb in ExperLisp that I was wondering whether anyone else was having. The following, though a terrible little routine is a perfect way to get to the bomb (which I was finally able to isolate trying to make a nice routine, that a later version of this piece of trash was working towards). Well, enough about that, here it is:

(SETQ MYWIND (NEWGRAFWINDOW '(100 100 300 350)))
(MYWIND 'SETWTITLE "GONNA BOMB!!")
(DEFUN COORDINATES ()
    (GETMOUSE))
(WHILE
    (NOT (BUTTON))
    (MYWIND 'SELECTWINDOW)
    (APPLY
         FILLOVAL '(50 50 (CAR (COORDINATES)) (CADR (COORDINATES)) MYWIND)))

Please excuse any typos or forgotten "(" or ")" or "'", if I forgot them here does not mean that I forgot them in the actual code, more important is the fact that though Lisp tries to give me an error it bombs with the ID #2 everytime. In fact the first time rather than just a bomb it added the desire to have a disk swap (though both disks where in their respective drives!)

Contest Winner

THE CATCHER

The Catcher (alias Steve Yaeger) wins the Mousehole printing contest sponsored by MacTutor, with this assembly entry to mimic the BASIC statement: PRINT "HELLO":END on the Macintosh. Steve wins a check for $50 and a MacTutor thank you. DON L also submitted an excellent answer that we will print next month.

; Print "hello" on the printer.
;       Written by Steve Yaeger
; If the printer is off-line, this will hang the Mac
;       until it is put back on line
; If there is no Printdriver file it just Beeps and exits
;
; The Linker file looks like this
;
;       HELLO.REL
;       ]
;
; These are the Equates Notice that the iPrReset, iPrLineFeed, 
; and  iPrPageEnd are Longwords and not words as in 
; PREQU.TXT from Counsulair.

 XREF START

; These are the PrDrvr constants.
 
iPrDrvrRef  EQU      $FFFD  ; Driver's RefNum = NOT ResID
iPrIOCtl       EQU      5              ; The Raw Byte IO Proc's ctl # 

PrDevCtl       EQU      7               ; The PrDevCtl Proc's ctl  # 

iPrReset       EQU      $00010000  ; The CParam for res
iPrPageEndEQU      $00020000  ; The CParam for end
iPrLineFeed EQU      $00030000   ; The CParam for pap 
lParam1 EQU      0                 ; the three printer parameters
lParam2 EQU      4
lParam3 EQU      8
 
; These are the standard call parameters
csCode  EQU      $1A      ;control dependent command 
csParam EQU      $1C             ;control dependent param.
ioCompletion  EQU     $C         ;pointer to async notifier routine
ioResult         EQU      $10      ;returns operation results
ioFileNameEQU      $12      ;pointer to name of driver
ioRefNum  EQU      $18      ;driver reference #
ioPermssn   EQU      $1B  ;read/write permission

; Traps used in this program
    .TRAP       _InitGraf                    $A86E
    .TRAP       _InitFonts                   $A8FE
    .TRAP       _FlushEvents       $A050
    .TRAP       _InitWindows       $A912
    .TRAP       _InitMenus                   $A930
    .TRAP       _InitDialogs                 $A97B
    .TRAP       _InitCursor                  $A850
    .TRAP       _TEInit                      $A9CC
    .TRAP       _Open                        $A000
    .TRAP       _Control                     $A004
    .TRAP       _SysBeep                     $A9C8
 
START
;Initialize Managers
PEA     -4(A5)            ;Space Created For Quickdraw's Use
_InitGraf                 ;Init Quickdraw
_InitFonts                ;Init the Font Manager
MOVE.L  #$0000FFFF,D0   ;This Mask Is For All Events
_FlushEvents              ;Flush All Of These Events
_InitWindows              ;Init the Window Manager
_InitMenus                ;Init the Menu Manager
CLR.L    -(SP)            ;restart procedure
_InitDialogs              ;Init the Dialog Manager
_InitCursor               ;Init to arrow cursor
_TEInit                   ;Init Text Edit
 
;------- OPEN THE PRINT DRIVER -------
LEA   '.Print',A1    ;Get a Pointer to the Drivers Name
LEA     IOPARMS,A0 ;Get the Parameter base addres
MOVE.L  A1,ioFileName(A0)     ;Store the Drivers Name addr
CLR.B    ioPermssn(A0)    ;fsCurPerm (whatever we got)
_OPEN
 LEA      IOPARMS,A0 ;Get the Parameter base address
 MOVE.W ioResult(A0),D0          ;Check for an error
 CMP.W  #0,D0                    ;is result ok?
 BEQ      @0                       ;Yes skip the error bell
 MOVE.W #30,-(SP)                ;beep length
 _SYSBEEP                          ;beep to indicate error
 BRA      @4

@0
;------ RESET THE PRINTER TO DEFAULTS -------
LEA     IOPARMS,A0               ;Get the Parameter base addr
MOVE.W  #iPrDevCtl,csCode(A0)   ;Set up a control type call
MOVE.L  #iPrReset,csParam+lParam1(A0)   ;only 1 (Reset)
CLR.L   csParam+lParam2(A0)
CLR.L   csParam+lParam3(A0)
_CONTROL
LEA     IOPARMS,A0 ;Get the Parameter base address
MOVE.W  ioResult(A0),D0   ;Check for an error
CMP.W   #0,D0                    ;is result ok?
 BEQ      @1                       ;Yes skip the error bell
 MOVE.W #30,-(SP)                ;beep length
 _SYSBEEP                          ;beep to indicate error
 BRA      @4
 
@1
;------ ACTUALLY PRINT THE WORD HELLO -------
LEATEXT_STRING,A1;Get address of string to pr
LEA     IOPARMS,A0 ;Get the Parameter base addres
MOVE.W  #iPrIOCtl,csCode(A0)  ;Set up a text streaming call
MOVE.L  A1,csParam+lParam1(A0)  ;Parameter one is a            
 ;pointer to the text
MOVE.L  #(TEXT_STRING_END-TEXT_STRING),                        csParam+lParam2(A0)
;Parameter two is the length of the text
CLR.L csParam+lParam3(A0)    ;No third Parameter
_CONTROL
 LEA      IOPARMS,A0         ;Get the Parameter base address
MOVE.W  ioResult(A0),D0   ;Check for an error
CMP.W   #0,D0                    ;is result ok?
BEQ     @2                         ;Yes skip the error bell MOVE.W
 #30,-(SP)                ;beep length
_SYSBEEP                           ;beep to indicate error
 BRA     @4

@2
;------ PRINT A CR+LF JUST FOR THE FUN OF IT --------
LEA   IOPARMS,A0            ;Get the Parameter base addres
MOVE.W  #iPrDevCtl,csCode(A0)   ;Set up a control type call
MOVE.L  #iPrLineFeed,csParam+lParam1(A0) 
 ;only 1? parameter (CR+LF)
CLR.L   csParam+lParam2(A0)     ;Parameter 2 undetermined
CLR.L    csParam+lParam3(A0)
_CONTROL
LEA     IOPARMS,A0         ;Get the Parameter base address
MOVE.W  ioResult(A0),D0          ;Check for an error
CMP.W   #0,D0                    ;is result ok?
BEQ     @3                         ;Yes skip the error bell
MOVE.W  #30,-(SP)                ;beep length
_SYSBEEP                           ;beep to indicate error
BRA     @4

@3
;---- EJECT A PAGE SO THAT WE CAN SEE WHAT HAPPENS
LEA     IOPARMS,A0          ;Get the Parameter base address
MOVE.W  #iPrDevCtl,csCode(A0)   ;Set up a control type call
MOVE.L  #iPrPageEnd,csParam+lParam1(A0) 
 ;only 1 parameter (eject)
CLR.L   csParam+lParam2(A0)
CLR.L   csParam+lParam3(A0)
_CONTROL
LEA     IOPARMS,A0          ;Get the Parameter base address
MOVE.W  ioResult(A0),D0          ;Check for an error
CMP.W   #0,D0                    ;is result ok?
 BEQ.S    @4                       ;Yes skip the error bell
 MOVE.W  #30,-(SP)                 ;beep length
_SYSBEEP                           ;beep to indicate error
@4
 RTS
 ;        Data Structures
TEXT_STRING      DC.B    'HELLO'
TEXT_STRING_END
.ALIGN  2
 
IOPARMS          DCB.L    20,0
; ------------------   end of program -------------------------------

Letters

First off, I want you to know that I really enjoy reading MacTutor, especially the articles on assembly language. Second I want to report a slight error on page 37 of the June issue. In figure 1 of that issue, a Pascal string is shown as 'fName: String[63]' with it's assembly equivalent as 'DCB.B 63,0'. This could be very misleading. A pascal string is always preceded by a one byte length byte. Thus STR[63] is rendered by DCB.B 64,0. Since using this structure as it was shown could cause an odd alignment of the next data structure, watch out for the 'ole length byte. It could be a difficult bug to track down! Thanks again for an interesting and informative publication.

Made my Day with Modula-2

Terri Wiles, President

Compu-Craft

Thank you for "making my day". We have just recieved the back issues we ordered. It is utterly exciting to see so many articles of substance, especially after months of searching through the pages and pages of the fluff of which certain other Mac magazines are comprised. It is particularly encouraging to me to see articles about Modula-2. I certainly want to express my most sincere hope that this will become a regular column, with particular emphasess on the task of interfacing with the Macintosh.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All

Combo Quest (Games)
Combo Quest 1.0 Device: iOS Universal Category: Games Price: $.99, Version: 1.0 (iTunes) Description: Combo Quest is an epic, time tap role-playing adventure. In this unique masterpiece, you are a knight on a heroic quest to retrieve... | Read more »
Hero Emblems (Games)
Hero Emblems 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: ** 25% OFF for a limited time to celebrate the release ** ** Note for iPhone 6 user: If it doesn't run fullscreen on your device... | Read more »
Puzzle Blitz (Games)
Puzzle Blitz 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Puzzle Blitz is a frantic puzzle solving race against the clock! Solve as many puzzles as you can, before time runs out! You have... | Read more »
Sky Patrol (Games)
Sky Patrol 1.0.1 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0.1 (iTunes) Description: 'Strategic Twist On The Classic Shooter Genre' - Indie Game Mag... | Read more »
The Princess Bride - The Official Game...
The Princess Bride - The Official Game 1.1 Device: iOS Universal Category: Games Price: $3.99, Version: 1.1 (iTunes) Description: An epic game based on the beloved classic movie? Inconceivable! Play the world of The Princess Bride... | Read more »
Frozen Synapse (Games)
Frozen Synapse 1.0 Device: iOS iPhone Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Frozen Synapse is a multi-award-winning tactical game. (Full cross-play with desktop and tablet versions) 9/10 Edge 9/10 Eurogamer... | Read more »
Space Marshals (Games)
Space Marshals 1.0.1 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.1 (iTunes) Description: ### IMPORTANT ### Please note that iPhone 4 is not supported. Space Marshals is a Sci-fi Wild West adventure taking place... | Read more »
Battle Slimes (Games)
Battle Slimes 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: BATTLE SLIMES is a fun local multiplayer game. Control speedy & bouncy slime blobs as you compete with friends and family.... | Read more »
Spectrum - 3D Avenue (Games)
Spectrum - 3D Avenue 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: "Spectrum is a pretty cool take on twitchy/reaction-based gameplay with enough complexity and style to stand out from the... | Read more »
Drop Wizard (Games)
Drop Wizard 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Bring back the joy of arcade games! Drop Wizard is an action arcade game where you play as Teo, a wizard on a quest to save his... | Read more »

Price Scanner via MacPrices.net

Apple’s M4 Mac minis on sale for record-low p...
B&H Photo has M4 and M4 Pro Mac minis in stock and on sale right now for up to $150 off Apple’s MSRP, each including free 1-2 day shipping to most US addresses. Prices start at only $469: – M4... Read more
Deal Alert! Mac Studio with M4 Max CPU on sal...
B&H Photo has the standard-configuration Mac Studio model with Apple’s M4 Max CPU in stock today and on sale for $300 off MSRP, now $1699 (10-Core CPU and 32GB RAM/512GB SSD). B&H also... Read more

Jobs Board

All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.