lst off ttl "QuickASM Shell v0.70" exp off tr on cas se * dup *====================================================== * Graphic Shell for QuickASM development system * Programming by Lane Roath * Copyright (c) 1990 Ideas From the Deep & Lane Roath *------------------------------------------------------ * 26-Jun-90 0.70 :Line/Label in, Find centers text, WORDS works! * 20-Jun-90 0.60 :now works w/new stuff from Shawn & LOGIN!!!! * 10-Jun-90 0.50 :asm,link,menus now much easier to use * 30-Mar-90 0.40 :One shell, graphics & text... works! * 01-Mar-90 0.35 :QA command parsing working!!! * 27-Feb-90 0.30 :QA output trapped, link & assemble work * 22-Feb-90 0.20 :start adding QA stuff (seperate file) * 09-Feb-90 0.10 :start graphics shell from WW code *====================================================== rel Version = $00700000 ;v0.70 Class1 = $2000 lst off use 2/data/qa.equates use macs use ifd.equs use equs lst rtn EXT HProj,HSrc,HGSOS,HTran,HTool,InstallKey,LoadQAStuff EXT pchr,pstr,pblk,pechr,pestr,peblk,DoClear,DoEnter EXT doTextMode,PrintWelcome,pt2c,SetStyle,mySetRuler EXT GrafVectors,SetTabs *====================================================== * Startup the program & do all that cool stuff QuickASM ENT phk ;use our bank as data bank plb tdc ; & save DP for special use sta myDP ~Startup #SSRec;#mySD;#0 ;startup the toolbox stz WdwCnt stz SDFlg stz ClearFlg stz EnterFlg stz PrtOK? stz LastFile stz SaveText lda #5002 ;init window menu sta WMenuRef lda #1 ;init search flags sta CaseFlg sta FromTop stz WordFlg stz LabelFlg inc sta TextPath ;can't have NIL initial path! lda #'1:' sta TextPath+2 ~NewHandle #200;ID2;#0;#0 ;allocate print record ply sty PrtHdl ;save handle, good or bad (stack)! plx stx PrtHdl+2 bcs :4 phx phy _PrDefault ;init record w/default values bcc :1 :4 ~SysError #MPInit ;show error w/allocation bra :0 :1 dec PrtOK? Hdl_Ptr PrtHdl;Ptr ldy #$18 ;index to wDev in style subrecord lda [Ptr],y and #%11111111_11011010 ;force condensed & text quality ora #%00000000_00000001 sta [Ptr],y :0 ~FMGetCurFID ;get current font ID PullLong NewStyle lda #22 sta NewStyle ;force cmd windows to be in COURIER! SEP #$20 lda #12 ;use 10 point sta NewStyle+3 REP #$20 jsr LoadQAStuff ;need QA stuff bcc :qagood ~SysError #QAError :qagood jsr PrintWelcome ;show QuickASM welcome text jsr GrafVectors ;set print vectors for graphics ~CreateMBar #Menus;#AppleMenu;#0 ;create our menu bar lda #16*1024 ;16K max sta TEMaxChrs lda #100 sta WdwRec ;only use half of screen lda #CmdWdwID sta WdwIDNum ldx #CmdTitle ;open command window jsr OpenWindow lax WdwPtr sax CmdPtr ;save wdw pointer lax TEHdl sax CmdTEHdl ;save TE handle (for inserts) jsr InstallKey ;let ENTER,CLEAR work lda #25 sta WdwRec lda #100 ;only use half of screen sta WdwRec+4 lda #ErrWdwID sta WdwIDNum ldx #ErrTitle ;open error window jsr OpenWindow lax WdwPtr sax ErrPtr ;save wdw pointer lax TEHdl sax ErrTEHdl ;save TE handle (for inserts) jsr InstallKey ;setup as required stz TEMaxChrs ;unlimited source size lda #199 sta WdwRec+4 ;docs use all of screen lda #WindowID sta WdwIDNum sta FrontWdw ;force update of menus ~SelectWindow CmdPtr stz PrintBuf jsr PrintWelcome ;show QuickASM welcome text _InitCursor ;no longer waiting to startup ~CheckClick #TextName ;do we have a doc to open? txa beq :9 ; no- don't open anything jsr HProj ;open new/finder doc :9 do TeaseWare jsr DoTease ;show teaser if on fin *====================================================== * Main event loop Main _QARun ;allow background apps time ~QAGetQuitFlag ;time to quit? pla bfl :0 jsr mySD ; yes- repeat if open windows :0 jsr SetWindow ;insure menus set correctly ~TaskMaster #$FFFF;#TaskRc ;handle the tasks! pla bfl :9 ;result from TaskMaster cmp #$19 ;special menu item? beq :4 cmp #$11 ;menu event? bne :1 :4 jsr HandleMenus ; yes- handle it bra :9 :1 cmp #$16 ;close window bne :2 jsr CloseWindow ; yes- do so! :2 :9 ~TEGetLastError #-1;TEHdl ;report any internal errors pla bfl :ok ~SysError #MTEInfo ; (saves crashes!) bra Main :ok lda ClearFlg ;user press CLEAR? beq :9a jsr DoClear ; yes- clear text :9a lda EnterFlg ;how about ENTER? beq Main jsr DoEnter ; yes- parse line bra Main *====================================================== * Close all windows, save all docs, and shutdown the tools mySD phk plb clc ;use our bank, in 65816, 16 bit mode xce rep #$30 lda myDP tcd lda WdwCnt ;do we need to close a window? cmp #3 blt :1 jsr CloseWindow ; yes- try to do so bcc :2 ~QASetQuitFlag #0 ;user canceled!!! stz SDFlg :2 rts :1 ~QAGetLaunch ;get launch flags (leave on stack) _QADispose _QAShutdown ;shutdown QA tools _Shutdown ;shutdown real tools ply pla plx ;get launch flags from stack stz QuitParms lax #TextPath ;[][ vat do we get back? ][] sax QuitParms+2 sty QuitParms+6 ; & save to quit area tya beq :quit and #$FF ;launch or shutdown? bfl :launch lda #1 ; SD- make parms usable sta SDParms _GSOS _OSShutdown;SDParms ;shutdown brk $69 :launch lda #2 sta QuitParms ;use launch parms! :quit _GSOS _Quit;QuitParms brk $69 *====================================================== * Handle Menu events from Task Master HandleMenus lda TData+2 ldx #-2 ;locate index ]loop inx inx cpx MaxMenus ;should never happen! bge :err cmp MenuNums,x ; by looking for menu # bne ]loop lda TData ; item = item # - menu # sec sbc TData+2 ;and exit via da table jsr (HdlMenus,x) ~HiliteMenu #0;TData+2 ;unhilite menu rts :err ora #$8000 ~SysError #MMenu ;ohhhh no! rts *====================================================== * Set the window after a new one becomes active SetWindow ~FrontWindow pla ;get pointer to front window plx ; (system,ours,none) cmp WdwPtr bne :1 cpx WdwPtr+2 ;is this a new window? bne :1 rts ; no- done! :1 sax WdwPtr ; yes- save pointer ora WdwPtr+2 bfl :disable ;window open? ~CheckMItem #0;LastFile ; yes- uncheck last file in menu ~GetWKind WdwPtr ;is this one of our windows? plx stx SysWdw ;save status bmi :disable ~GetCtlHandleFromID WdwPtr;#TECtrlID PullLong TEHdl ~GetWRefCon WdwPtr ;get application value plx stx LastFile ;check in menu ~CheckMItem #1;LastFile ply cpy #WindowID ;source window? bne :disable+2 brl EnableMenus ; yes, enable our menus :disable stz LastFile brl DisableMenus ; no, disable our menus *====================================================== * Handle Apple menu events HApple bne :1 about? ldx #Anorm ldy #anz-Anorm lda TaskRc+14 ;option key pressed? and #%0000100000000000 bfl :a ldx #Aspcl ; yes, show bullshit dialog ldy #asz-Aspcl :a stx AMod ;set text to show sty AMod+4 ~CenterDialog #DAbout ~Alert #DAbout;#0 ; & display centered alert pla :1 dec ;help? bne :2 :2 do TeaseWare DoTease ~NewAlert #DTease ; yes, does user really want to? fin rts *====================================================== * Handle the File menu selections HFile ENT asl ;create index tax jmp (:tbl,x) ; & pass control to item handler :tbl da :Close da :New da :Open da :Save da :Save_As da :Write da :Write_As da :Append da :Revert da :Page_Setup da :Print da :Shutdown da :Quit *------------------------------------------------------ :Close brl CloseWindow *------------------------------------------------------ :New SHORTAX ldx NewName inc NewName+1,x ;we allow new files A-Z LONGAX ldx #NewName brl OpenWindow2 ; yes- do so! *------------------------------------------------------ :Open ldy #TxtTypes lda TaskRc+14 ;option key pressed? and #%0000100000000000 bfl :a ldy #AllTypes ; yes! Allow opening of ANY file! :a lda #OpenPrompt ldx #TextName ;present SFDialog to select file _GetFile bcs :2b btr :2a :1a rts ;no file selected! :2a _WaitCursor jsr :ReadFile ;read file w/style if present bcs :2d ldx #TextPath ;title = pathname jsr OpenWindow2 ;Now open a window for the text! bcs :2d jsr SetText ;place text into TERec bcc :2c :2d jsr RemoveText ;error- clean up memory :2b ~SysError #MFOpen ;inform user of errors :2c _InitCursor rts *------------------------------------------------------ :Write dec SaveText ;FALL THRU!!! *------------------------------------------------------ :Save ~GetWTitle WdwPtr ; yes- need a filename? PullLong Ptr lda [Ptr] cmp #$550A ; (untitled = 10,'U') beq :Save_As brl SaveData ; no, just save *------------------------------------------------------ :Write_As dec SaveText ;FALL THRU!!! *------------------------------------------------------ :Save_As ~GetWTitle WdwPtr ; yes- get filename pla plx ; & set up for SF dialog ldy #TextName _CreateSFPath ; (set path & file info) bcs :2b ~PutFile #SavePrompt;#TextName bcs :2b bfl :2c ~GetInfoRefCon WdwPtr ;get handle to title memory _DisposeHandle ; & free that memory! bcs :2b ldx #InPath ;reset window title jsr SetWdwTitle :g2b bcs :2b brl SaveData ;save file under new name! *------------------------------------------------------ :Page_Setup lda PrtOK? ;ok to do this? bfl :6a ~PrStlDialog PrtHdl ; yep, do so plx :62b bcs :52b :6a rts *------------------------------------------------------ :Print lda PrtOK? ; yes, printing ok? bfl :6a brl PrintText ; yes- do so! *------------------------------------------------------ :Append ~GetFile #AppendPrompt;#TextName;#TxtTypes bcs :g2b bfl :6a ~TESetSelection #-1;#-1;#0 ;move to end of text :DoApnd _WaitCursor jsr :ReadFile ;read text & style from file :52b bcs :g2b ~TEReplace #%1101;textH;#0;#1;styleH;#0 ; & replace selection jsr RemoveText brl :2c *------------------------------------------------------ :Revert ~GetWTitle WdwPtr ; yes- anything to revert to? PullLong Ptr lda [Ptr] cmp #$550A ; (can't revert if never saved!) beq :9a ~NewAlert #DWarning ; yes, does user really want to? bne :9a ~GetWTitle WdwPtr ;get name to revert to pla plx ldy #TextName _CreateSFPath ;set path & get save name :g52b bcs :52b lda #20 ;select entire document jsr HEdit brl :DoApnd ; & replace w/file contents *------------------------------------------------------ :Shutdown ~QASetLaunch #0;#-1 ;shutdown *------------------------------------------------------ :Quit _CloseAllNDAs ;close any open NDAs first bcs :g52b ~QASetQuitFlag #-1 ; & quit if we are OK :9a rts *------------------------------------------------------ * Save some code space, make changes easier :ReadFile ~ReadFile #TextName;#0 ;read file into memory bcs :rfxit sax textH stz styleH ;assume just a text file stz styleH+2 lda OpenParms+14 ;wp file? eor #$50 bne :rfxit jsr LoadStyle ; yes- get style info :rfxit rts *====================================================== * Handle the edit menu selections HEdit ENT sec sbc #20 ;create usable #, ignore sys stuff blt :2z ~TESetSelection #0;#-1;#0 ;Select All! :2z rts *====================================================== * Handle a menu item selection HWdwMenu bne :1 ;stack windows? jsr :InitStack lda #:stack ; yes- do so brl DoWindows :1 dec ;edit next document? beq :3 dec ;text mode? bne :2 jmp doTextMode ; yes- do it! :3 stz temp lda #:nextwdw ; yes- search for it jsr DoWindows lda temp2 ;got one? cmp #-1 bne :2a lda temp3 ; no- or we wrapped to first! :2a sta TData ;and select it!!! :2 lda #:front jsr DoWindows ;select it- return = error! lda #$FACE :9 ~SysError #MGetWindow ;oh shit! rts *------------------------------------------------------ :front cpx TData ; yes- correct one? bne :no pla ; yes, return to main loop! pla ~SelectWindow Ptr ;bring it to the front! bcs :9 _InitCursor ; & exit :no rts *------------------------------------------------------ :stack cpy #WindowID ;only stack source windows bne :no ~ShowHide #0;Ptr ;adjust window pos while hidden ~MoveWindow :pos+2;:pos;Ptr ~SizeWindow #586;#124;Ptr ~NotifyCtls #-1;#16;#0;Ptr ~ShowWindow Ptr ;redisplay it lda :pos+2 sec sbc #10 tax ;adjust for new pos lda :pos sbc #10 ; (+10 in both directions) cmp #25 bge :is2 ;still on screen? :InitStack lda #24 ldx #1 ;set start of stack ldy WdwCnt ]loop dey ;done w/windows? beq :is2 adc #10 ; no- move windows up pha txa adc #10 ; & to the left tax pla cmp #70 ;moved to furthest pos? blt ]loop :is2 sta :pos stx :pos+2 rts :pos dw 0,0 *------------------------------------------------------ * Search thru windows for 'next' one (wish I could search menus!) :nextwdw lda temp ;first time? bne :srch stx temp ; yes- init stz temp2 dec temp2 bra :s2 :s1 cpx temp3 ;less than first? bge :xit :s2 stx temp3 ; yes- save for wrap rts :srch cpx temp ;greater than first? blt :s1 cpx temp2 ; yes- less than last? bge :xit stx temp2 ; yes- save it :xit rts *====================================================== * Go thru each window on the screen. If a window is ours * call a procedure to deal with it, otherwise cycle to end * of the windows & return to caller * ENTRY: A = routine pointer * EXIT: none (last window reached) DoWindows sta :mod+1 ;save pointer to routine _WaitCursor ~GetFirstWindow ;get first window in system bra :getptr ]loop ~GetWRefCon Ptr ;check to see if it's the right window plx ply bcs :9 cpy #WindowID ;is it ours? beq :mod cpy #ErrWdwID beq :mod cpy #CmdWdwID bne :next :mod jsr $FFFF ; yes -handle it! :next ~GetNextWindow Ptr ;try the next one :getptr pla plx sax Ptr ;got one? ora Ptr+2 bne ]loop ; yes- check it! :9 _InitCursor rts *====================================================== * Open a new text edit window for our use * ENTRY: X = title to window * EXIT: standard errors OpenWindow2 ;zeros out WdwPtr after open jsr OpenWindow stz WdwPtr stz WdwPtr+2 ;insure menus set correctly rts OpenWindow phx ;save pointer to title ~NewWindow #WindowParms ;open actual window PullLong WdwPtr bcs :9 ;error? inc WdwCnt ;we opened another! ~NewControl2 WdwPtr;#0;#TETemplate PullLong TEHdl bcc :1 :9 plx ~SysError #MWOpen ;ooops! Show user! rts :1 lda #2 ldy #$10 ;we use inc WMenuRef lda WMenuRef sta NWID ;id for menu sta temp lda WdwIDNum ;id for checks sta temp+2 ~SetWRefCon temp;WdwPtr ;set 'our window' thingy. bcs :9 ~InsertMItem #NewWdw;#-1;#WindowMenu bcs :9 ~TEGetRuler #3;#rulerH;#0 ;get ruler bcs :9 lax rulerH sax Hdl ;move to DP & place on stack pea #0 pea #$26 phx pha _SetHandleSize ;it's a bit bigger now! bcs :9 Hdl_Ptr Hdl;Ptr ldy #$10 lda #2 ;we use specific tabs sta [Ptr],y ldy #$14 lda #75 ;opcode tab sta [Ptr],y ldy #$18 lda #125 ;operand sta [Ptr],y ldy #$1C lda #200 ;comment sta [Ptr],y ldy #$20 lda #300 ;extra sta [Ptr],y ldy #$24 lda #-1 ;terminator sta [Ptr],y jsr mySetRuler ;use it! Hdl_Ptr TEHdl;Ptr ;point to TE record ldy #$10 lda [Ptr],y ;clear dirty flag! and #%10111111 sta [Ptr],y plx *====================================================== * Set the title for the current window * ENTRY: X = address of title (GS/OS class 1 string) * EXIT: none SetWdwTitle stx temp2 ;point to title lda (temp2) inc inc sta temp ; & get length stz temp+2 ~NewHandle temp;ID3;#$C000;#0 ;get memory for title PullLong Hdl bcc :1 :9 ~SysError #MWTitle ;show error! rts :1 Hdl_Ptr Hdl;Ptr ;point to this memory SHORTM lda (temp2) ;get length of title sta [Ptr] tay ]loop iny lda (temp2),y ;copy string to buffer dey sta [Ptr],y dey bne ]loop LONGM ~PrSetDocName Ptr ;show name over network bcs :9 ~SetWTitle Ptr;WdwPtr ;set window title bcs :9 ~SetInfoRefCon Hdl;WdwPtr ; & save handle to title memory :g9 bcs :9 ~GetWRefCon WdwPtr ;get menu item # plx ply bcs :g9 stx temp ~SetMItemName Ptr;temp ;set menu item's name bcs :g9 ~CalcMenuSize #0;#0;#WindowMenu rts *====================================================== * Close the currently open window, checking to see if the * window's contents need to be saved. CloseWindow lda FrontWdw ;is it ours? btr :0 ~SendBehind #-2;WdwPtr ; no- send it behind the others rts :0 jsr CheckSave ;save data if needed bcs :9 ~GetInfoRefCon WdwPtr ;get handle to title memory _DisposeHandle ; & free that memory! bcs :1 ~GetWRefCon WdwPtr ;get menu item # plx ply bcs :1 phx _DeleteMItem ;remove from window! bcs :1 ~CalcMenuSize #0;#0;#WindowMenu dec WdwCnt ;one less! ~CloseWindow WdwPtr ;close window if OK bcc :9 :1 ~SysError #MClose ;oops! :9 rts *====================================================== * Check to see if the contents of the current window need * to be saved, and save them if so. CheckSave ~GetWTitle WdwPtr ;get title for dialog PullLong FNSub Hdl_Ptr TEHdl;Ptr ;deref TE record ldy #$10 lda [Ptr],y ;get ctrlFlag and #%01000000 ;...has record been modified? bfl :0 ~AlertWindow #1;#FNSub;#DSave ; yes- should we save it? plx beq :save ; yes- do so dex beq :0 ; no, but continue anyway :9 sec :0 rts ; no- abort whatever we're doing! :save lda #3 ;handle as 'save' from menu! brl HFile *====================================================== * Save the document data, including Styles if asked! SaveData do TeaseWare brl DoTease ;no saving... only writes! else _WaitCursor ;show saving ~ZoomWindow WdwPtr ;insure proper Ruler settings jsr GetText ; (well-first check for no text) ~GetWTitle WdwPtr ;get name to save under pla plx bcs :g9 ;good window? ldy #TextName _CreateSFPath ;set path & get save name bcs :g9 lda #$50 ;assume w/p ldx #'AQ' ldy SaveText ;correct? bfl :1 lda #4 ; no- save as text ldx #0 :1 sta CreateParms+8 ;set file & aux type stx CreateParms+10 ~WriteFile #TextName;textH ;save text to data fork :g9 bcs :9 lda SaveText ;save as text only? bfl :7 _GSOS _GetFileInfo;SFIParms lda SFIParms+10 and #$FFFE ; yes- set linker's ASM bit sta SFIParms+10 _GSOS _SetFileInfo;SFIParms bra :8 :7 jsr SaveStyle ; no- go write style info bcs :9 :8 Hdl_Ptr TEHdl;Ptr ;point to TE record ldy #$10 lda [Ptr],y ;saved...clear dirty flag! and #%10111111 sta [Ptr],y :xit ~ZoomWindow WdwPtr ;back to normal stz SaveText ;clear text only flag _InitCursor brl RemoveText ;get rid of that memory! :9 ~SysError #MWriting ;ohh... shit! bra :xit *====================================================== * Save the style information to the resource fork * of the appr. file. styleH contains handle to styles SaveStyle ~CreateResourceFile #'QA';#$50;#$C3;#TextName ~OpenResourceFile #0;#0;#TextName bcc :1 cmp #eofEncountered ;empty? sec bne RClose :1 ~RemoveResource #rTEStyle;#1 bcc :2 cmp #resNotFound ;$63 -GS/OS beq :2 cmp #$1E06 ;not found? sec bne RClose ; bad boy error! :2 ~AddResource styleH;#0;#rTEStyle;#1 fin ;--- TEASEWARE --- RClose plx php pha phx _CloseResourceFile ;File ID on stack pla plp rts *====================================================== * Get the style information from WP file LoadStyle ~OpenResourceFile #0;#0;#TextName bcs RClose ~LoadResource #rTEStyle;#1 ;try to load it PullLong styleH bcs RClose ~DetatchResource #rTEStyle;#1 ;take it from the system! bra RClose *====================================================== * Get the text from the current document, and setup the * selection information for use by somebody important. * ENTRY: none (front window = text document to work with) * EXIT: bcs = error; selStart,selEnd = range, temp3 = # of banks GetSelText ENT jsr GetText ;get text & style info jsr GetSelection ;get start & end of selection CmpLong selStart;selEnd bne :sel ;do we have a selection? stz selStart stz selStart+2 MoveLong textLen;selEnd ; no- textualize entire doc! :sel lda [Hdl] sta Ptr ldy #2 ;deref returned handle lda [Hdl],y clc ;insure offset into large buffer adc selStart+2 sta Ptr+2 lda selEnd+2 sec sbc selStart+2 ;get # of banks to look thru sta temp3 ldy selStart ;get inner bank offset clc rts *====================================================== * Get the text and style records from the current window * ENTRY: none * EXIT: textLen = length of text, HDL = copy of textH GetText ENT ~TEGetText #%11101;#textH;#0;#3;#styleH;#0 PullLong textLen bcs :9 ;get text OK? lda textLen ora textLen+2 ;do we have any text? bne :8 brl EmptyDlg ; no- inform user :8 ldx textH stx Hdl ;save a few bytes... ldx textH+2 stx Hdl+2 rts :9 ~SysError #MGetTxt ;show user! pla bra RemoveText *------------------------------------------------------ * Awwww... save a few bytes, make it easier... next LIB! * ENTRY: textH, styleH = handles to text and style data * EXIT: textH and styleH are disposed, TE errors passed thru SetText ENT ~TESetText #%01101;textH;#0;#1;styleH;#0 *------------------------------------------------------ * After we get it we usually need to free the memory again! RemoveText ENT php ;save errors from SetText pha ~DisposeHandle textH ;get rid of that memory! ~DisposeHandle styleH pla plp rts *====================================================== * Get some information about the current TE record GetTEInfo ENT ~TEGetTextInfo #TEInfoRec;#5;#0 bcc :1 ~SysError #MTEInfo ;oh... damnation! :2 rts :1 lda TEInfoRec ora TEInfoRec+2 ;anything in document? btr :2 *------------------------------------------------------ * Show user file is empty! EmptyDlg _InitCursor ;probably a watch... ~NewAlert #DEmpty ;inform user pla ; & skip calling routine! sec bra RemoveText *====================================================== * Get or set the selection area in the current TE window GetSelection ENT ~TEGetSelection #selStart;#selEnd;#0 rts SetSelection ENT ~TEScroll #1;selStart;#0;#0 ~TESetSelection selStart;selEnd;#0 rts *====================================================== * Enable our menus to allow normal operation EnableMenus lda FrontWdw ;we already do this? bfl :1 rts :1 stz FrontWdw ; no- we will now dec FrontWdw ldx #-1 lda #$FF7F ;turn them on! bra SetMens *====================================================== * Disable our menus so we can't screw things up (ie, DAs, no window) DisableMenus lda FrontWdw ;we already do this? btr :1 lda SysWdw ;system window? cmp :wdw sta :wdw ; (not already done) bne :1 rts :1 stz FrontWdw ; no- we will now ldx #0 lda #$80 ;turn them off! bra SetMens :wdw ds 2 *------------------------------------------------------ * Set menus according to Acc. value SetMens psl #0 ;end of list flag do TeaseWare else ;leave save/print items disabled pea #258 phx pea #259 phx pea #260 phx pea #261 phx fin ;--- TEASEWARE --- pea #262 phx pea #263 phx ldx #0 bit SysWdw bmi :1 ldx #-1 :1 pea #270 phx pea #265 phx pea #0 ;end of list flag pha pea #SrcMenu ;dis/enable some menus _SetMenus ;stack 'em up! _SetMItems rts *====================================================== * Update our text window UpdateWin ~DrawControls TaskRc+16 ;update is easy! rtl *====================================================== * Print the loaded text to the printer, via Print Manager PrintText do TeaseWare brl DoTease else ~PrValidate PrtHdl ;insure a good record plx bcs :zpe1 ~PrJobDialog PrtHdl ;get user's printing options plx bcs :PE1 ;error? txa btr :GoForIt ;cancel? rts :GoForIt _WaitCursor ~ZoomWindow WdwPtr ;[][ work around TE bug ][] * Open the 'print document' and start printing our information ~PrOpenDoc PrtHdl;#0 ;open new grafPort for printing PullLong PPort :zpe1 bcs :PE1 Hdl_Ptr PrtHdl;Ptr ;Dereference the print record ldy #6+2+6 ldx #8-2 ]loop lda [Ptr],y ;copy page rectangle to our area sta QuitPath,x dey dey dex dex bpl ]loop stz temp ;starting line # = 0 stz temp+2 :NewPage ~PrOpenPage PPort;#0 ;open a new page to print on :PE1 bcs :eof ~TEPaintText PPort;temp;#QuitPath;#0;TEHdl PullLong temp bpl :ok lda #$2209 ;x = $FFFF at EOF! :ok pha ~PrClosePage PPort ;close the current page pla bfl :NewPage ;error or EOF? cmp #$2209 clc beq :eof sec ; no- real error! :eof php pha ~PrCloseDoc PPort ; yes- close entire printed document pla plp bcs :err ~PrPicFile PrtHdl;#0;#StatusRec ;print file to the printer! bcc :done :err cmp #$80 ;ok if just a Cancel (oA-.) command beq :done pha pha _PrSetError ;abort printing w/proper error pla ora #$8000 ~SysError #MPrint ;show user our error! :done ~ZoomWindow WdwPtr ;[][ undo TE bug fix ][] _InitCursor rts fin ;--- TeaseWare --- *====================================================== * This is our tool record for the Startup call SSRec dw 0 dw $C080 ;640 & do it as fast as possible! dw 0 adrl 0 ;dpage handle dw :sse-*/4 ;number of tools dw 10,$0100 ;SANE dw 04,$0300 ;quickdraw dw 18,$0206 ;qdaux dw 06,$0300 ;event dw 27,$0300 ;font dw 14,$0300 ;window dw 16,$0300 ;control dw 15,$0300 ;menu dw 28,$0300 ;list dw 20,$0300 ;lined dw 21,$0101 ;dialog dw 22,$0104 ;scrap dw 05,$0101 ;desk dw 23,$0101 ;file dw 19,$0200 ;print manager dw 34,$0100 ;TextEdit :sse *------------------------------------------------------ * Menu definitions Menus adrl MWindow adrl MTran adrl MGSOS adrl MTool adrl MSrc adrl MProj adrl MEdit adrl MFile adrl MApple adrl 0 * We use the following to get our menu indexes MenuNums dw AppleMenu dw FileMenu dw EditMenu dw ProjMenu dw SrcMenu dw ToolMenu dw GSOSMenu dw TranMenu dw WindowMenu MaxMenus dw *-MenuNums ;used to insure we don't bomb! HdlMenus da HApple da HFile da HEdit da HProj da HSrc da HTool da HGSOS da HTran da HWdwMenu *------------------------------------------------------ MApple asc '$$@\XN300',00 asc '--About QuickASM...\N300',00 asc '--Help...\N301*HhVD',00 asc '>' MFile asc '$$ File \N255',00 asc '--New\N256*Nn',00 asc '--Open...\N257*Oo',00 asc '--Close\N255*`~V',00 asc '--Save\N258*SsD',00 asc '--Save As...\N259D',00 asc '--Write Text\N260*WwD',00 asc '--Write As...\N261DV',00 asc '--Append...\N262',00 asc '--Revert\N263',00 asc '--Page Setup...\N264',00 asc '--Print...\N265*PpDV',00 asc '--Shutdown\N266',00 asc '--Quit\N267*Qq',00 asc '>' MEdit asc '$$ Edit \N250',00 asc '--Undo\N250*ZzVD',00 asc '--Cut\N251*Xx',00 asc '--Copy\N252*Cc',00 asc '--Paste\N253*Vv',00 asc '--Clear\N254',00 asc '--Select All\N270',00 asc '>' MProj asc '$$ Project \N400',00 asc '--New\N400D',00 asc '--Open...\N401D',00 asc '--Close\N402VD',00 asc '--Save\N403D',00 asc '--Save As...\N404VD',00 asc '--Build Project\N405*Bb',00 asc '--Build other...\N410',00 asc '--Options...\N406VD',00 asc '--Add Window\N407D',00 asc '--Add File...\N408D',00 asc '--Remove Window\N409D',00 asc '>' MSrc asc '$$ Source \N500',00 asc '--Find...\N500*Ff',00 asc '--Find Again\N501*Gg',00 asc '--Find & Replace\N502*Rr',00 asc '--Replace All\N503',00 asc '--Go Label/Line\N516*LlV',00 asc '--Assemble\N515*Aa',00 asc '--Margins & Tabs\N504*Mm',00 asc '--Fix Source\N505*Yy',00 asc '--Information\N506*IiV',00 asc '--Type Style...\N507V',00 asc '--Black\N508',00 asc '--Blue\N509',00 asc '--Red\N510',00 asc '--Violet\N511',00 asc '--Green\N512',00 asc '--Jade\N513',00 asc '--L.Grey\N514',00 asc '>' MTool asc '$$ Tools \N600',00 asc '--Execute Tool...\N600VD',00 asc '>' MGSOS asc '$$ GS/OS \N700',00 asc '--Delete...\N700*Dd',00 asc '--Rename...\N701VD',00 asc '--Format Disk\N702D',00 asc '>' MTran asc '$$ Transfer \N800',00 asc '--Launch...\N800*=+V',00 asc '--Merlin 16+\N801D',00 asc '>' MWindow asc '$$ Windows \N5000',00 asc '--Stack Windows\N5000*Kk',00 asc '--Edit Next Doc\N5001*Ee',00 asc '--Text Mode\N5002*TtV',00 asc '>' NewWdw asc '--New Window\H' NWID hex FACE00 *------------------------------------------------------ WindowParms da WindowEnd-WindowParms da %1100001110100100 WdwTtl adrl MWOpen adrl 0 da 25,1,199,639 adrl 0 da 0 da 0 da 0 da 0 da 0 da 0 da 9 da 0 da 162 da 0 adrl 0 da 0 adrl 0 adrl 0 adrl UpdateWin WdwRec da 25,1,199,639 adrl -1 adrl 0 WindowEnd CmdTitle strl ' Commands ' ErrTitle strl ' Errors ' *------------------------------------------------------ * The TextEdit window control definition TETemplate dw 17 adrl TECtrlID dw 0,0,0,0 adrl $85000000 dw 0 dw %0111110000000000 adrl 0 adrl %01000010001000000000000000000000 dw 2,4,2,4 adrl $FFFFFFFF dw 0 adrl 0 dw 0 adrl 0 dw 0 adrl 0 adrl 0 TEMaxChrs adrl 0 ;modified *====================================================== * About dialog to give credit where due DAbout dw 40,25,115,270 dw 1 hex 80,80,80,80 adrl :3 adrl :1 adrl :2 adrl 0 :2 dw 1 dw 0,0,75,245 dw $A adrl :2a dw 0 dw 0 adrl 0 :2a str '' :3 dw 2 dw 0,0,75,245 dw $F adrl :2a dw 0 dw 0 adrl 0 :1 dw 3 dw 5,3,72,243 dw $8016 AMod adrl Anorm dw anz-Anorm dw 0 adrl 0 Anorm hex 01530300,014A0100 asc 'QuickASM Shell',AA,' v0.70' hex 01530000,0D0D asc ,'Portions are Copyright ',A9,' 1988-90' hex 0D,01430100 asc 'Ideas From the Deep' hex 01430000 asc ' & ' hex 01430200 asc 'Lane Roath' hex 01430000,0d0d asc 'QuickASM system written by ',0D asc 'Shawn Quick and Lane Roath' anz Aspcl hex 014A0100 asc 'QuickASM written in QuickAsm ',0D asc '& Merlin 16+. Dated ' date 5 ;dd-mmm-yy hex 0d0d hex 0153020001430100 asc /"Will you still need me, will you / asc /still feed me, when I'm 64?"/,0D asc /Sgt. Pepper's Lonely Hearts Club Band / asc / \ When I'm 64 \ Beatles/ asz *====================================================== * Misc. NewAlert dialog templates do TeaseWare DTease asc '80\' asc 'This version has this stupid message everywhere to ' asc 'remind you that this is a PRELIMINARY version of ' asc 'QuickASM. Please contact us to purchase the final copy ' asc 'or to report bugs and/or suggest inprovements! ',0D0D asc 'Ideas From the Deep - ' asc '309 Oak Ridge Lane / Haughton / LA / 71037',0D asc 'Phone: (318) 949-8264',0D,'(if no answer, leave message)\' asc '^#0',00 fin ;--- tease dialog --- DWarning ENT asc '54/' asc 'This operation could damage the document ' asc 'contents! Are you sure you wish to do this?/' asc '^#6/#1',00 DSave asc '55$' asc '"*0" has been changed! Should I save it?$' asc '^#2$#3$#1',00 DEOF ENT asc '13/' asc 'No more matches!/' asc '^#0',00 DEmpty asc '14/' asc 'File Empty!/' asc '^#0',00 FNSub ENT adrl 0 ;filled in! *------------------------------------------------------ * Our GS/OS parm tables (NOTE: Class 1 now!) SFIParms dw 4 adrl TextName ds 8 TxtTypes ENT dw 3 dw $8000 dw $04 adrl 0 dw $8000 ;we read these types of files dw $B0 adrl 0 dw $8000 dw $50 adrl 0 AllTypes ENT dw 1 dw $C000 ;we can delete anything! dw 0 adrl 0 *------------------------------------------------------ * Error message text ENT MFOpen MQuit str 'Quit' MMenu str 'Menu #' MWOpen str 'Opening Window' MFOpen str 'Open File' MGetTxt str 'GetText' MClose str 'Close Wdw' MPInit str 'Init PrRec' MPrint str 'Printing' MWTitle str 'Wdw Title' MWriting str 'Writting!' MGetWindow str 'Get Wdw' MTEInfo str 'TEInfo' QAError str 'QA Startup' OpenPrompt str 'Open the file...' SavePrompt str 'Save file as...' AppendPrompt str 'Append the file...' NewName strl 'Untitled.@' *====================================================== * The following are equates to use DS w/no code space ENT tFind,tReplace,TextName,TextPath,QuitPath,PrintBuf dum * ;we DS this in the link file QuitParms ds 8 SDParms ds 4 WdwIDNum ds 2 ;so Cmd,Err,Source wdws have unique IDs tFind ds 30 ;oh-no! tReplace ds 30 TextName ds 32 ;Class 1 file & path buffers TextPath ds 256 CmdLine ENT QuitPath ds 128 ;dup of above, for saves!!! TEInfoRec ENT ;textedit info record StatusRec ds 128 ;Used by printing routines TempBuf ENT PrintBuf ds 256 *------------------------------------------------------ * Text Edit records we use ENT NewStyle,textH,styleH,rulerH,selStart,selEnd,myDP NewStyle ds 12 textH ds 4 ;handles that can't be in DP! styleH ds 4 rulerH ds 4 selStart ds 4 ;text selection info selEnd ds 4 myDP ds 2 ;page in bank 0 of my DP DS_Size ENT dend sav 2/obj/qasm.l