home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / GEOSApps / LOC128SRCA.SFX / newfsrc (.txt) < prev    next >
GEOS ConVerT  |  1990-02-12  |  49KB  |  1,553 lines

  1. NewF.SRC
  2. PRG formatted GEOS file V1.0
  3. StarNX-1000C
  4. NewFsym
  5. NEWF.SRC
  6. LOCATE128.DOC
  7. ReadMeFirst
  8. Write Image V2.1
  9. Red Storm
  10. geoWrite    V1.1
  11.   This file was created with
  12. Wrong is Write.
  13.   Written by Joe Buckley.
  14. .if Pass1
  15.     .include    NewFsym
  16.     .include    NewFmac
  17. .endif
  18. .psect
  19. DAStart:
  20.     jsr     FirstGO        ; initilize entry to system & set-up
  21.                 ; some variables
  22.     jsr     SecdGO        ; init. drives and disk names
  23.     jsr    ThreGO        ; draw box subtitles to screen
  24.     jmp    LastGO        ; init. routine for user input
  25. below is space for reliable var.'s, ect..
  26. CatRuff:    .byte     0,0,0,0,0,0,0,0,0        ; disk name holder
  27. CntD:    .byte     0            ; store current drive value
  28. HoldMeA:    .byte     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ; echo from GEOS keylog
  29. SMKA:    .byte     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    ; echo from input
  30.     .byte    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0  
  31.     .byte    0,0,0,0,0,0  
  32. CntA:    .byte     0            ; pointer for buffer 
  33. CntB:    .byte     0            ; valid file limiter
  34. CntC:    .byte     0            ; name list limiter
  35.  a little history here......
  36. ; This routine self-destructs on start-up of the program.  I originally did not
  37. ; intend this file for the Public Domain.  Since the routine has long since been
  38. ; kracked (as they say) it'll give you an idea on protection of your 
  39. ; programs.  It was for debugging protection.  As a debugger runs the 
  40. ; program to disassemble it, this area would be nothing more than a group 
  41. ; of text strings from the current directory, as seen by the debugger.
  42. ; hence, a major feature of the program would "disappear" when it was 
  43. ; loaded into memory.  Since debuggers have grown up a wee bit  since 
  44. ; 1988, it no longer applies there, but, it can be used for other things.
  45. FirstGO:            ; Set-up initial prg. buffer areas
  46. LoadB    dispBufferOn,#(ST_WR_FORE)    ;allow writes to FG only
  47. LoadW    r0,(DAEnd-F_ENTRY)  ;Clear all of .ramsect after GEOS zeropage
  48. LoadW    r1,F_ENTRY
  49. jsr    ClearRam
  50. LoadW    leftMargin,#$00
  51.  from Rob Knops RPN DA PD source code
  52. jsr    i_MoveData  ;Save Applications zero page space so I can use it
  53.     .word    $0061    ;    (also GEOS space under the FAC's)
  54.     .word    appzpage
  55.     .word    $009e
  56. jsr    MySaver        ; prepare directory TS table
  57.     bne    15$        ; No? then reset loop
  58.      PNOTE
  59. load main program pointers and equates into memory before 
  60. ; destroying this area.  You'll also note I have expanded the macros' for 
  61. ; a better look at what is happening here.
  62. Init1:
  63.     lda     #0    
  64.     sta     r0H   
  65.     sta     r1H   
  66.     sta     r2H   
  67.     sta     r3H  
  68.     lda     #8  
  69.     sta     r0L   
  70.     lda     #4    
  71.     sta     r1L
  72.     lda     #24 
  73.     sta     r2L  
  74.     lda     #17 
  75.     sta     r3L   
  76.     jsr     DstroyA
  77.     lda     #9  
  78.     sta     r0L 
  79.     lda     #0
  80.     sta     r1H  
  81.     lda     #5   
  82.     sta     r1L  
  83.     jmp     DstroyA 
  84. DstroyA:
  85.     lda     #40  
  86.     sta     r4L  
  87.     ldx     #4  
  88.     ldy     #10   
  89.     jsr     BBMult   
  90.     clc           
  91.     lda     #0   
  92.     adc     r1L   
  93.     sta     r1L   
  94.     lda     #140   
  95.     adc     r1H   
  96.     sta     r1H 
  97.     lda     r0L  
  98.     clc           
  99.     adc    r1L   
  100.     sta     r1L   
  101.     lda     r0H   
  102.     adc     r1H  
  103.     sta     r1H  
  104.     lda     
  105. screencolors
  106.     ldx     #0  
  107. R10A8:    ldy     #0   
  108. R10AA:    sta     (r1L),y   
  109.     iny       
  110.     cpy     r2L   
  111.     bne     R10AA 
  112.     pha       
  113.     clc       
  114.     lda     #40       
  115.     adc     r1L       
  116.     sta     r1L   
  117.     bcc     R10RD      
  118.     inc     r1H  
  119. R10RD:    pla           
  120.     inx           
  121.     cpx     r3L       
  122.     bne     R10A8 
  123.     rts       
  124. ps RPN DA PD source code
  125. SecdGO:                ;
  126.     jsr    
  127. InitDRVVars    ;
  128.  Init.'s Drive var.'s
  129.     lda     $C00F         ; version checker
  130.     cmp     #18       
  131.     bcs     R10CE        ; skip if version is o.k.
  132.     jmp    QutMe        ; quit if version NOT o.k.
  133. R10CE:    lda     #128        ; write to forground only
  134.     sta     dispBufferOn    ;
  135.     lda     curDrive    ; load drive byte
  136.     sta    CntD        ; store current drive value
  137.     ldx     #2        ; address of source string to get
  138.     jsr     GetPtrCurDkN    ; get current disk name pntr.
  139.     LoadW    r1,HoldMeA    ; destination address of string
  140.     lda    #0
  141.            ; ammount of bytes to move
  142.     sta     r2H        ; " 
  143.     lda     #16
  144.         ; " 
  145.     sta     r2L
  146.         ; " 
  147.     jsr     MoveData    ; copy diskname for internal use
  148. I expanded this macro to allow easier changes 
  149.     jmp    WasteMeA        ; 
  150. dummy routine to waste time        
  151.  was part of trojan horse scheme
  152. ThreGO:                ; Draws Main Screen
  153.     jsr     i_GraphicsString    ; inline drawing routine
  154.  inline routine is faster than the normal GraphicsString routine
  155.     .byte     NEWPATTERN, 1   
  156.     .byte     MOVEPENTO       
  157.     .word     $0048       
  158.     .byte     40          
  159.     .byte     RECTANGLETO 
  160.     .word     528          
  161.     .byte     192         
  162.     .byte     NEWPATTERN, 0   
  163.     .byte     MOVEPENTO       
  164.     .word     $0040       
  165.     .byte    32          
  166.     .byte     RECTANGLETO 
  167.     .word     512           
  168.     .byte     184         
  169.     .byte     MOVEPENTO       
  170.     .word     $0040       
  171.     .byte     32          
  172.     .byte     FRAME_RECTO     
  173.     .word     512          
  174.     .byte     184         
  175.     .byte     MOVEPENTO       
  176.     .word     $0042       
  177.     .byte     104         
  178.     .byte     FRAME_RECTO     
  179.     .word     508         
  180.     .byte     182         
  181.     .byte     MOVEPENTO       
  182.     .word     $0042       
  183.     .byte     81          
  184.     .byte     FRAME_RECTO     
  185.     .word     508          
  186.     .byte     92          
  187.     .byte     NULL        ; end of graphic drawings
  188. so now we can draw the text
  189.  can draw the text
  190. 20$    rts        ; rts here
  191. various text strings to place in various parts of the screen
  192. the GEOS inline routines are slightly faster than standard PutString routines
  193. they are also a little neater for your source code
  194.     jsr     i_PutString       
  195.     .word     220           
  196.     .byte     40          
  197.     .byte    BOLDON      
  198.     .byte    "  LocateFile.128  ",0        ; title text
  199.     jsr     i_PutString       
  200.     .word     72     
  201.     .byte     51          
  202.     .byte     "Drive:",0        ; Drive text    
  203.     jsr     i_PutString       
  204.     .word     272          
  205.     .byte     51          
  206.     .byte     "Disk:",0        ; Disk text
  207.     jsr     i_PutString       
  208.     .word     72      
  209.     .byte     78          
  210.     .byte     "Enter Files' Name:",0        ; Input text
  211.     jsr     i_PutString       
  212.     .word     268        
  213.     .byte     78          
  214.     .byte     "Last Page:",0        ; Last Page displayed text
  215.     jsr     i_PutString       
  216.     .word     72     
  217.     .byte     100         
  218.     .byte     "File Name:",0        ; Name text
  219.     jsr     i_PutString       
  220.     .word     268          
  221.     .byte     100         
  222.     .byte     "Page:",0        ; pad # numeric text
  223.     jsr     i_PutString       
  224.     .word     333        
  225.     .byte     100         
  226.     .byte     "Pad #:",0        ; loc. # numeric text
  227.     jsr     i_PutString       
  228.     .word     393        
  229.     .byte     100         
  230.     .byte     "FileType:",0        ; loc. # numeric text
  231.     LoadW    r0,IconTable        ; 
  232.     jmp     DoIcons           ; set up icon loop
  233. p icon loop
  234. icon loop
  235. icon loop
  236. p icon loop
  237. icon loop
  238. icon loo
  239.  various routines to clear areas for screen printing, used during program flow
  240. the GEOS inline routines a slightly faster than standard RECTANGLE routines
  241. RECA:    jsr     i_Rectangle       ; 
  242. "@Clear INPUT Box print area
  243.     .byte     82, 91          ; Y-top,Y-bot positions
  244.     .word     $0045       ; X-right position
  245.     .word    506         ; X-left position
  246.     rts               
  247. RECB:    jsr     i_Rectangle       ; 
  248. "@Clear DRIVE: print area
  249.     .byte     43, 53          
  250.     .word     $0073        
  251.     .word     $00E4        
  252.     rts               
  253. RECG:    jsr     i_Rectangle       ; 
  254. "@Clear DISK: print area
  255.     .byte     43, 53          
  256.     .word     $0144         
  257.     .word     $018E        ; 
  258.     rts               
  259. RECJ:    jsr     i_Rectangle       ; 
  260. "@Clear Display Box print area
  261.     .byte     105,181        
  262.     .word     $0043       
  263.     .word     506           
  264.     rts               
  265. d     506           
  266.     rts               
  267. me:",0        ; Name text
  268.     jsr     i_PutString       
  269.     .word     268          
  270.     .byte     100         
  271.     .byte     "Page:",0        ; pad # numeric text
  272.     jsr     i_PutString       
  273.     .word     333        
  274.     .byte     100         
  275.     .byte     "Pad #:",0        ; loc. # numeric text
  276. IconTable:        ; 
  277. Standard Icon Structure table
  278. .byte     6           ; number of icons in table
  279.     .word     $0000      ; xpos for mouse
  280.     .byte     0           ; ypos for mouse
  281.     .word    DrvIcon        ;  ptr graphic data
  282. "@ DRIVE ICON
  283.     .byte    9        ; xpos (in cards)
  284.     .byte    54        ; ypos  (in pixels)
  285.     .byte    (JDW|DOUBLE_B)    ; width (in cards)
  286.     .byte    JDH        ;     height  (in pixels)
  287.     .word    DriveChg
  288. ; service routine
  289.     .word    DskIcon        ; 
  290. "@ DISK ICON
  291.     .byte    23        ; 
  292.     .byte    54        ; 
  293.     .byte    (JEW|DOUBLE_B)    ; 
  294.     .byte    JEH        ; 
  295.     .word    DkCg        ; 
  296.     .word    RESET        ; 
  297. "@ PAGE + forward ICON
  298.     .byte    37        ;  X
  299.     .byte    54        ;  Y
  300.     .byte    (JGW|DOUBLE_B)    ;
  301.     .byte    JGH        ; 
  302.     .word    MiSaver        ; 
  303.     .word    BESET        ; 
  304. "@ PAGE - reverse ICON
  305.     .byte    44        ;  X
  306.     .byte    54        ;  Y
  307.     .byte    (WGJ|DOUBLE_B)    ;
  308.     .byte    HGJ        ; 
  309.     .word    RiSaver        ; 
  310.     .word    QutIcon        ; 
  311. "@QUIT ICON
  312.     .byte    51        ; 
  313.     .byte    54        ; 
  314.     .byte    (JFW|DOUBLE_B)    ; 
  315.     .byte    JFH        ; 
  316.     .word    QutMe        ; 
  317.     .word    ALodr        ; 
  318. "@LOAD APPLICATION ICON
  319.     .byte    51        ; X
  320.     .byte    36        ; Y
  321.     .byte    (JHW|DOUBLE_B)    ; W
  322.     .byte    JHH        ; H
  323.     .word    ApExec        ; SR
  324.     LoadW    r0,IconTable        ; 
  325.     jmp     DoIcons           ; set up icon loop
  326. p icon loop
  327. icon loop
  328. icon loop
  329. p icon loop
  330. icon loop
  331. icon loo
  332. "@ICON PICTURE DATA  - 
  333. "@geoassembler will translate them to bitmap data
  334. DrvIcon:
  335. JDW    =    picW
  336. JDH    =    picH
  337. DskIcon:
  338. JEW    =    picW
  339. JEH    =    picH
  340. QutIcon:
  341. JFW    =    picW
  342. JFH    =    picH
  343. RESET:
  344. JGW    =    picW
  345. JGH    =    picH
  346. BESET:
  347. EWGJ    =    picW
  348. HGJ    =    picH
  349. ALodr:
  350. JHW    =    picW
  351. JHH    =    picH
  352. PicDatEnd:    .byte    00    ; label here for use with geoDebugger
  353.             ; not necessary for program flow -
  354.             ; 
  355. I place these labels in various areas when 
  356.             ; 
  357. debugging to locate certain problem areas
  358.             ; 
  359. I might run into 
  360. te    JGH        ; 
  361.     .word    MiSaver        ; 
  362.     .word    BESET        ; 
  363. "@ PAGE - reverse ICON
  364. ping:    .byte    44        ;  X
  365.     .byte    5
  366. DriveChg:    jsr    ReStore        ; restore vars. to org. settings
  367.     jsr    SwapDrive    ; change drives
  368.     bra    R12EC        ; I left this in so you can see I am
  369.                 ; Human and also make errors
  370. "@ ; D
  371.     lda     curDrive 
  372. R12E3:    clc           ; interesting isn't it !
  373.     adc     #1        ; see if you can figure out my
  374.             ; goof-up... clue..
  375.  how many times?
  376.     cmp     #12           
  377.     bne     R12EC         
  378.     lda     #8            
  379. R12EC:    pha               
  380.     jsr     SetDevice     
  381.     jsr     OpenDisk      
  382.     pla               
  383.     cpx     #0            
  384.     bne     R12E3         
  385.     jsr     DkCg        ; change disk vars.
  386. L12FR:    jsr     RECB         ; redraws drive print area
  387.     lda     curDrive      
  388.     clc               
  389.     adc     #57           
  390.     pha               
  391.     lda     #0            
  392.     sta     r11H          
  393.     lda     #116         
  394.     sta     r11L           
  395.     lda     #51             
  396.     sta     r1H           
  397.     pla               
  398.     jmp     PutChar       ; for Drive letter
  399. DkCg:    jsr    ReStore        ; reset vars. for a new disk
  400.     jsr     RECG         ; redraw disk text
  401.     jsr     OpenDisk      
  402.     ldx     #2            
  403.     jsr     GetPtrCurDkN      
  404.     ldy     #0            
  405. R1322:    lda     (r0L),y        
  406.     cmp    #160          
  407.     beq     R132D         
  408.     iny               
  409.     cpy     #17           
  410.     bne     R1322        
  411. R132D:    lda     #0            
  412.     sta    (r0L),y       
  413.     lda     #$01        
  414.     sta     r11H          
  415.     lda     #$51          
  416.     sta     r11L          
  417.     lda     #51           
  418.     sta     r1H           
  419.     jsr     PutString     ; prints string to screen
  420. jsr    MySaver        ; prepare new directory TS table
  421. ; You may be wondering why some of my routines are named weird. 
  422. ; These are standard routines I use in many different programs.  I have disks
  423. ; full of routines so it is just an easier way for me to locate what I am looking for.
  424. ; an R prefix usually means I haven't finished improving it, but it works o.k. as is.
  425. ; an L prefix usually means I have finished working it and works o.k. as is.
  426. ; an S prefix means it is used to store data, but I can make it better if I try.  
  427.      @; ]
  428. ; a J prefix usually menas I don't want to release it.  
  429.      @: [
  430. ; an I prefix usually means it is PD, written by someone else, o.k. to use if
  431. ; credit is given where credit is due!  
  432.      @; ]
  433. ould enhance this routine to search 
  434.      @ALL
  435.  active disk drives for the application
  436. ; we want to run 
  437. ; **********************************************************************
  438. "@LastGO
  439. init.'s our USER routines for input (mish-mosh of routines)
  440. Rick Coleman and William C. Coleman
  441. both needed some "tweaking" this is the current result of combining them
  442. ; **********************************************************************
  443. LastGO:
  444.     lda     #0        ; pattern pointer
  445.     jsr     SetPattern    ; set system pattern
  446.     jsr    L12FR        ; rewrite drive/disk strings
  447.     jsr    DkCg        ; reset as if a new disk GEOS bug in
  448.                 ; early version
  449. L134R:    jsr     UseSystemFont    ; use 128's BSW char. set
  450.  Here I could have used MasterBlasters' "UseMYFont" routine if I wished to install
  451. ;     my own custom Font set.  Since a complete set of the BSW char. set is not
  452. ;     available, I decided to bypass this feature in this version (some shifted chars do not jive!)
  453.     jsr     RECA        ; clear user input text area
  454.     lda     #0        ; store char input with a '0' to be safe
  455.     sta    SMKA        ; internal string buffer 
  456.     sta     r1L           ; fault routine flag ( 
  457. $00 is sys. default
  458.     LoadW    r0,SMKA    ; pointer to string buffer for chars' typed in
  459. ; ** 
  460. "@NOTE
  461.  ** anything in the system string buffer will be echoed here when KeyVector 
  462. ; is activated from getstring routine. 
  463. ; if the systems string buffer has a string in it, it will echo here, hence the reason
  464. ; for routine L134R to start string with a "0" upon entry ! 
  465. ; Ex: If you ran this DA from geoWrite, then "geoWrite" would show here as soon 
  466. ; as the routine was executed.  The USER didn't type it in, so we don't want it!
  467.     lda     #22           
  468.     sta     r2L           ; MAX_CHAR's to accept    
  469.     lda     #0
  470.           ; X POS (word value) for placement    
  471.     sta     r11H
  472.         ;   " 
  473.     lda     #68        ;   " 
  474.     sta     r11L 
  475.         ;   " 
  476.     lda     #83
  477.     sta     r1H           ; Y POS (byte value) for placement
  478.     LoadW    keyVector,KeyLen    ; mainloop wedge (until <CR> pressed)
  479.     jmp     GetString     ;
  480. ; KeyLen is wedged into MainLoop by GetString routine
  481. ; it is completed when the user presses the <CR> key.
  482. Please note that while running this program under geoDebugger V2.0, the clock process
  483. may stop if it is used too long
  484.  (while in geoDebugger). 
  485. will happen without a doubt if you are using a RamLink! 
  486. KeyLen:
  487.     lda     SMKA         ; char. typed in     by user
  488.     bne     KeyGetter     ; if < > 0     then execute KeyGetter
  489.     jmp    L134R        ; if = 0 then re-start input routine
  490. KeyGetter:
  491.     jsr     RECJ         ; clear area
  492.     lda     #1        ; load new value    
  493.     sta    CntA        ; store new pointer
  494.     sta     CntB         ; store new counter    
  495.     jsr     DirFrst        ; check GEOS version and 1st dir entry
  496. R13RR:    jsr     TrsBuf         ; transfer valid stuff to buffer
  497.     bne    R13C3        ; branch is not 0
  498.     jsr      L13DE        ; finish up misc. stuff
  499. R13C3:    jsr    DirNxt        ; check GEOS version and next dir entry
  500.     inc     CntB         ; increment counter by 1
  501.     lda     CntB         ; load new value into counter
  502.     cmp     #9            ; check last valid count before reset/end
  503.     bcc     R13D8         
  504.     inc     CntA         
  505.     lda    #1            
  506.     sta     CntB         
  507. R13D8:    tya               
  508.     beq     R13RR         
  509.     jmp    L1523        
  510. L13DE:    lda     CntC         
  511.     sta     r0L           
  512.     lda     #19           
  513.     sta     r1L           
  514.     ldx     #2            
  515.     ldy     #4            
  516.     jsr     BBMult        
  517.     lda     #16           
  518.     sta     r1H           
  519.     lda     #82           
  520.     sta     r1L           
  521.     lda     r0L           
  522.     clc               
  523.     adc     r1L           
  524.     sta     r1L           
  525.     lda     r0H           
  526.     adc     r1H           
  527.     sta     r1H           
  528.     sec               
  529.     lda     r1L           
  530.     sbc     #3            
  531.     sta     r1L           
  532.     bcs      R140E        
  533.     dec     r1H           
  534. R140E:    ldy     #3            
  535. R1410:    lda     (r5L),y       
  536.     sta     (r1L),y       
  537.     iny               
  538.     cpy     #19           
  539.     bne     R1410         
  540.     lda     #0            
  541.     sta     (r1L),y       
  542.     lda     CntA         
  543.     iny               
  544.     sta     (r1L),y       
  545.     lda     CntB         
  546.     iny               
  547.     sta     (r1L),y       
  548.     inc     CntC         
  549.     lda     CntC         
  550.     cmp     #8            ; 
  551. this counter imits to 8 filenames 
  552.     bcc      R1438        
  553.     pla               
  554.     pla               
  555.     jmp     L1523         
  556. R1438:    rts               
  557. buffer for chars' typed in
  558. ; ** 
  559. "@NOTE
  560.  ** anything in the system string buffer will be echoed here when KeyVector 
  561. ; is activat
  562. ; a much easier version of this routine to understand is found near the end 
  563. ; of this file in PrintPage, LastPage, PDIR
  564. TrsBuf:    jsr      L14D2        
  565.     jsr      L1479        
  566.     bne      R1444        
  567.     lda     #255          
  568.     rts               
  569. R1444:    ldx     #0            
  570. L1446:    lda     SMKA,x       ; checks character input
  571.     bne     WildCk        ; if not 0, then check wildcards
  572.     lda     (r6L),y       
  573.     cmp     #160           
  574.     beq     R1453         
  575.     lda     #255          
  576. R1453:    rts               
  577. WildCk:    cmp     #33           ; 
  578. "@ ! char
  579.     bne     R145R         
  580.     jsr     L14RR         
  581. R145R:    cmp     #42           ;  
  582. "@* char
  583.     bne     T1462         
  584.     jsr     L1480         
  585. T1462:    cmp     #63        ;  
  586. "@? char
  587.     bne     L146R        
  588.     inx               
  589.     lda     SMKA,x       
  590.     iny               
  591. L146R:    cmp     (r6L),y       
  592.     bne     R1478         
  593.     iny               
  594.     inx               
  595.     cpx     #23           
  596.     bcs     R1478         
  597.     jmp     L1446        
  598. R1478:    rts               
  599. ny               
  600.     cpy     #19           
  601.     bne     R1410         
  602.     lda     #0            
  603.     sta     (r1L),y       
  604.     lda     CntA         
  605.     iny               
  606.     sta     (r1L),y       
  607.     lda     CntB         
  608.     iny               
  609.     sta     (r1L),y       
  610.     inc     CntC         
  611.     lda     CntC         
  612.     cmp     #8            
  613. this 
  614. counter imi
  615. L1479:    ldy     #0             
  616.     lda     (r5L),y        
  617.     bne     R147F         
  618. R147F:    rts               
  619. L1480:    inx               
  620.     lda     SMKA,x       
  621.     beq     R14R5         
  622.     bne     R148C         
  623. R1488:    inx               
  624.     lda     SMKA,x       
  625. R148C:    cmp     #42           
  626.     bne     R1498         
  627.     inx               
  628.     lda     SMKA,x       
  629.     beq     R14R5          
  630.     bne     R148C         
  631. R1498:    cmp     #0            
  632. checks for end of entry name ' 0 ' char beofre printing next char.
  633. "@* char
  634.     bne     T1462         
  635.     jsr     L1480         
  636. T1462:    cmp     #63        ;  
  637. "@? char
  638.     bne     L146R        
  639.     inx               
  640.     lda     S
  641.     bne    R14A4         
  642.     lda     (r6L),y       
  643.     cmp     #160          
  644. check $A0  'padding' char in filenames
  645.     bne     R14R2        
  646.     beq     R14R5         
  647. R14A4:    cmp     (r6L),y       
  648.     bne     R14AD         
  649.     iny               
  650.     cpx     #23            
  651.     bcc     R1488         
  652. R14AD:    iny               
  653.     cpy     #17           
  654.     bcc     R14A4         
  655. R14R2:    ldx     #255          
  656.     .byte    #44        
  657. R14R5:    ldx    #$00        
  658. R14R7:    pla               
  659.     pla               
  660.     txa               
  661.     rts               
  662. L14RR:    inx               
  663.     lda     SMKA,x       
  664.     cmp     #42
  665.     bne     R14C6        
  666.     jmp     L146R          
  667. R14C6:    cmp     #63           
  668.     bne     R14CD         
  669.     jmp     L146R         
  670. R14CD:    dex               
  671.     lda     SMKA,x       
  672.     rts               
  673.     lda     SMKA,x       
  674.     rts               
  675. R1478         
  676.     iny               
  677.     inx               
  678.     cpx     #23           
  679.     bcs     R1478         
  680.     jmp     L1446        
  681. R1478:    rts               
  682. ec     r1H           
  683. R140E:    ldy     #3            
  684. R1410:    lda     (r5L),y       
  685.     sta     (r1L),y 
  686. L14D2:    lda     r5H           
  687.     pha               
  688.     lda     r5L           
  689.     pha               
  690.     clc               
  691.     lda     #3            
  692.     adc     r5L           
  693.     sta     r5L           
  694.     bcc     R14E3         
  695.     inc     r5H            
  696. R14E3:    lda    #16             
  697.     sta     r6H            
  698.     lda     #62           
  699.     sta     r6L           
  700.     ldy     #16           
  701.     jsr     L1510         
  702.     lda     #39           
  703.     sta     r5L           
  704.     sta     r6L            
  705.     lda     #16             
  706.     sta     r5H              
  707.     sta     r6H           
  708.     ldy     #22           
  709.     jsr     L1510         
  710.     pla               
  711.     sta     r5L           
  712.     pla              
  713.     sta     r5H            
  714.     lda     #16           
  715.     sta     r6H           
  716.     lda     #62           
  717.     sta     r6L            
  718.     rts               
  719. $150F 60 
  720.     ; $150F 60 
  721.     rts               ; $150F 60 
  722.         ; $150F 60 
  723.         ; $150F 60 
  724.     ; $150F 60 
  725. $150F 60 
  726.         ; $150F 60 
  727. $150F 60 
  728.         ; $150F 60 
  729.         ; $150F 60 
  730.         ; $150F 60 
  731.  $150F 60 
  732. ; $150F 60 
  733.     ; $150F 60 
  734.         ; $150F 6
  735. L1510:    lda     (r5L),y       
  736.     cmp     #97           
  737.     bcc     R151D         
  738.     cmp     #123          
  739.     bcs     R151D         
  740.     sec               
  741.     sbc     #32           
  742. R151D:    sta     (r6L),y       
  743.     dey               
  744.     bpl     L1510         
  745.     rts               
  746. L1523:
  747.     lda     CntC         
  748.     bne     R152R         
  749.     jmp     L134R         
  750. R152R:
  751.     lda     #112          
  752.     sta     r1H            
  753.     LoadW    r0,FirstGO
  754. at this point, FirstGO is used as a buffer that stores Directory entries.
  755. ; from the keyboard input.  It is no longer the start-up routine !
  756. Originally used as a
  757. trojan horse
  758. to deter debugging efforts.
  759. L1542:    lda     #0            
  760.     sta     r11H          
  761.     lda     #68           
  762.     sta     r11L          
  763.     jsr     PutString     
  764. 11H          
  765.     lda     #68           
  766.     sta     r11L          
  767.     jsr     PutString     
  768.      #68           
  769.     sta     r11L          
  770.     jsr     PutString     
  771.     (r1L),y 
  772. see PDir routine for clearer explanation of this routine
  773.     inc     r0L           
  774.     bne     R1553         
  775.     inc     r0H           
  776. R1553:    lda     r0H           
  777.     pha               
  778.     lda     r0L           
  779.     pha               
  780.     ldy     #0            
  781.     lda     (r0L),y       
  782.     sta     r0L           
  783.     sty     r0H           
  784.     lda     #1            
  785.     sta     r11H          
  786. JCC:    lda     #32          
  787.     sta     r11L           
  788.     lda     #192          
  789.     jsr     PutDecimal        ; prints pad number
  790.     pla               
  791.     sta     r0L           
  792.     pla               
  793.     sta     r0H           
  794.     inc    r0L           
  795.     bne     R157A         
  796.     inc     r0H            
  797. R157A:    lda     r0H           
  798.     pha               
  799.     lda     r0L           
  800.     pha               
  801.     ldy     #0            
  802.     lda     (r0L),y       
  803.     sta     r0L           
  804.     sty     r0H           
  805.     lda     #1             
  806.     sta     r11H           
  807. JDD:    lda     #99        
  808.     sta     r11L          
  809.     lda     #192           
  810.     jsr     PutDecimal        ; prints page number
  811.     pla               
  812.     sta     r0L            
  813.     pla               
  814.     sta     r0H           
  815.     inc     r0L            
  816.     bne     R15A1         
  817.     inc     r0H           
  818. R15A1:    dec     CntC         
  819.     bne     R15A9        
  820.     jmp     L134R         
  821. R15A9:    lda     r1H           
  822.     clc               
  823. KMASS:    adc     #9            
  824.     sta     r1H           
  825.     jmp     L1542         
  826. WasteMeA:            ; dummy routine to waste a cycle
  827. ; I found a timing problem when using an FD2000 and a RamLink, so I placed
  828. ; this routine here to give a chance to update the processes'.  Seems my 
  829. ; init. routines take up a little more time than I wanted them to.
  830.     rts               
  831. ring buffer has a string in it, it will ech
  832. L15RD:            ; dummy routine just to waste a cycle
  833. was previously used for internal program protection routine
  834.     rts               ; 
  835. detects if original disk booted from is in the drive
  836. if different disk the swap file may be lost and you will crash !
  837. QutMe:    lda     CntD         ;  exit routine checker
  838.     cmp     curDrive      ; 
  839.     beq     L15D2         ; 
  840.     jsr     SetDevice     ; 
  841. L15D2:    jsr     OpenDisk      ; 
  842.     ldx     #2            ;  
  843.     jsr     GetPtrCurDkN      ; 
  844.     lda     #16           ;   
  845.     sta     r1H           ;  
  846.     lda    #22           ;
  847.     sta     r1L           ; 
  848.     ldx     #4            ;
  849.     ldy     #2            ;   
  850.     lda     #16           ;  
  851.     jsr     CmpFString    ; see if disknames are the same
  852.     beq     L15FF        ; if yes, continue exit
  853.     jsr     L160E        ; if no, put up DB and process
  854.     lda     #128          ; 
  855.     sta     mouseOn       ; 
  856.     LoadW    otherPressVector,L1605  ; 
  857.     rts               ; 
  858. L15FF:    jsr    DoQuit        ; restore app zero page
  859.     jsr     L15RD        ; 
  860.     jmp     RstrAppl      ; back to application booted from
  861. L1605:    lda     mouseData     ; 
  862.     bpl     R160R         ; 
  863.     rts               ; 
  864. R160R:    jmp     QutMe         ; 
  865. L160E:    jsr     RECJ         ; 
  866.     jsr    i_PutString       ; 
  867.     .word     $0044       ; 
  868.     .byte     116         ; 
  869.     .byte     "Insert "         ; 
  870.     .byte     NULL        ; 
  871.     lda     #0            ;  
  872.     sta     SMKA         ; 
  873.     LoadW    r0,HoldMeA        ; 
  874. "@Name of disk
  875.     jsr     PutString     ; 
  876.     jsr     i_PutString       ;  
  877.     .word     $0044       ;  
  878.     .byte     128         ; 
  879.     .byte     "(click when done)"        ; 
  880.     .byte     NULL        ;
  881.     rts               ; 
  882. by William C. Coleman 
  883.  needed for 64 version only, not needed here!
  884. DirFrst:    lda     $C00F         ; 
  885. "@check version
  886.     cmp     #19           ;  
  887.     bcs     MyDir1         ; 
  888.     jmp     $C9F7         ; jmp alternate version kernal
  889. MyDir1:    jmp     Get1stDirEnt      ;  
  890. by William C. Coleman  
  891.  needed for 64 version only, not needed here!
  892. DirNxt:    lda     $C00F         ;  
  893. "@check version
  894.     cmp     #19           ;   
  895.     bcs     MyDirNx         ; 
  896.     jmp     $CA10         ; jmp alternate version kernal
  897. MyDirNx:    jmp     GetNxtDirEnt      ; 
  898. LoadW    keyVector,KeyLen    ; mainloop route until <CR> pressed
  899.     jmp     GetString     ; see OGPRG routines
  900. ; KeyLen is wedged into MainLoop by GetString routine
  901. ; it is complete
  902. InitDRVVars:    
  903.  by William C. Coleman
  904. ;    Initializes and stores drive number(s). Call this routine during
  905. ;    your application's initization routine. boot_Drive and
  906. ;    work_Drive will be initialized and NewDrive call to intialize
  907. ;    disk turbo. If Geos V2.0 or above and a 3rd or 4th  drive is
  908. ;    available then numDrive will be inc'ed to 3 or 4. You should
  909. ;    set this back just before your DA exits if it doesn't support
  910. ;  the ammount of active drives available directly.
  911.     MoveB    curDevice,boot_Drive
  912.     sta    work_Drive        ;indicates current drive
  913.     lda    numDrives
  914.     cmp    #1
  915.     beq    20$            ;branch if one drive
  916.     lda    version        ;make sure version > 2.0
  917.     cmp    #$20
  918.     bcc    20$            ;no so leave numDrives alone
  919.     lda    driveType+2        ;see if there's a third drive
  920.     beq    20$            ;no so leave numDrives alone
  921.     and    #%1111            ;clear REU bits
  922.     sta    temp3D
  923.     lda    driveType        ;drive A
  924.     and    #%1111
  925.     cmp    temp3D        ;check if Drive C = Drive A
  926.     beq    10$            ;yep so it's OK to add it
  927.     lda    sysRAMFlg        ;no, so check for REU
  928.     and    #%01000000        ;device driver bit
  929.     beq    20$            ;no REU or no drivers in it
  930.      @10$:
  931.     inc    numDrives        ;will now equal 3 or 4
  932.      @20$:
  933. "@Name of disk
  934.     jsr     PutString     ; 
  935.     jsr     i_PutString       ;  
  936.     .word     $0044       ;  
  937.      @SwapDrive:
  938.  by William C. Coleman
  939. ;    Swaps the active drive if multi-drive system. Don't pass this
  940. ;    routine anything. work_Drive will be updated. 
  941. ;  Valid drive will be opened before returning
  942.         ldx    numDrives
  943.         dex
  944.         beq    30$        ;branch if 1 drive
  945.      @20$:
  946.     jsr    NextDrive        ;get next drive number
  947.         sta    work_Drive    ;and store it
  948.      @30$:
  949.         rts
  950. ;***************************************************
  951. ;    Returns next drive # in A. This is an internal routine.
  952.      @NextDrive 
  953. by William C. Coleman
  954. ;***************************************************
  955.      @NextDrive:
  956.     lda    numDrives
  957.         cmp    #1
  958.         beq    20$    ; only 1 drive so skip next stuff
  959.         add    #7        ; org. #8, fixed to check drives correctly
  960. ; a common error in the original routine.  Some tend to forget that the 
  961. ; bit counts 7-0 (8 bits).  If you add 8 it will overflow the pointer.  Works well 
  962. ; with 3 drives, but it mis-counts if it checks for a 4th disk drive in numDrives,
  963. ; and, the result would be 
  964.      @setting
  965.  the 4th disk drive 
  966.      @twice
  967.      @then
  968.  the 1st would
  969. ; be displayed 
  970.      @afterwards
  971. . If you per chance use a non-CBM disk drive
  972. ; it would be a fatal error if the #8 was left in there.  Some use a 'swap'
  973. ; routine that puts data in this same area!
  974.         sta    temp3D        ;max drive # + 1 (10 or 11)
  975.         lda    work_Drive    ;current drive
  976.      @05$:
  977.     add    #1
  978.         cmp    temp3D
  979.         bcc    10$        ;valid device number
  980.         lda    #8
  981.      @10$:
  982.         lda    driveType-8,y
  983.         beq    05$        ;drive not available
  984.         tya            ;new drive # in A
  985.         rts        
  986.      @20$:
  987.     lda    work_Drive    ;return current drive #
  988.         rts
  989. lliam C. Coleman  
  990.  needed for 64 version only, not needed here!
  991. DirNxt:    lda     $C00F         ;  
  992. "@check version
  993.     cmp     #19           ;   
  994.     bcs     MyDi
  995. DoQuit:            ; Restore applications's zero page space
  996. below by Rob Knop 
  997.     jsr    i_MoveData
  998.     ; Re-Install appzpage before exit 
  999.     .word    appzpage
  1000.     .word    $0061
  1001.     .word    $009e
  1002. some program var.s' placed here as they may trash in ramsect 
  1003. program area is more reliable than ram area
  1004.     .byte     0
  1005.     ; not used
  1006. temp3D:        .byte    0    ; temporary drive storage
  1007.     .byte     0
  1008.     ; not used
  1009. work_Drive:    .byte    0    ; currently opened drive
  1010.     .byte     0
  1011.     ; not used
  1012. boot_Drive:    .byte    0    ; drive DA booted from
  1013.     .byte     0
  1014.     ; not used
  1015. BoDet:        .byte    0    ; page number of last page in dir.
  1016.             .byte    0    ; not used
  1017. ModPtr:        .byte    0    ; pointer for PGCT
  1018. ModTS:        .byte    0    ; last page in dir. track
  1019.             .byte    0    ; last page in dir. sector
  1020. TodPtr:        .byte    0    ; not used
  1021. TodTS:        .byte    0    ; pointer for curdisk dir. track
  1022.             .byte    0    ; pointer for curdisk dir. sector
  1023. LastTS:        .byte    0    ; last page in current dir. track
  1024.             .byte    0    ; last page in current dir. sector
  1025. nd we can use diskBlkBuffer for other things.
  1026.     MoveB    TodTS,r1L        ; track pointer
  1027.     MoveB    TodTS+1,r1H        ; sector pointer
  1028. ;------
  1029. I could have used the MoveW routine here, I split it up so you could see the 
  1030. ;------
  1031. proce
  1032. ; **********************************************************************
  1033.      @ MySaver 
  1034. init.'s our T&S buffer with the current disk's directory page pointers
  1035. ; **********************************************************************
  1036. MySaver:
  1037.     LoadW    r0,#(DAEnd-Cat)    ; put buffer at end of DA
  1038.     LoadW    r1,#Cat        ; address of buffer
  1039.     jsr    ClearRam        ; fill area with 0's for now
  1040. 10$    jsr    GetDirHead        ; Get pointer to directory block
  1041.     beq    20$        ; if o.k. then continue
  1042.     ldx    #3        ; else set error code
  1043.     bra    88$        ; and quit
  1044. ;-----
  1045. Now we can get the first records T & S from the diskBlkBuffer and transfer
  1046. ;-----
  1047. it to our internal var to hold it, as later we will trash the diskBlkBuffer
  1048. 20$    MoveW    curDirHead,TodTS    ; copies word value to internal holder
  1049. ;-----
  1050. Now we transfer the starting T & S to r1 so the followchain routine can
  1051. ;-----
  1052. build a track and sector table of the current directory
  1053. ;-----
  1054. It puts this in our buffer "Cat" so your main will not be trashed
  1055. ;-----
  1056. and we can use diskBlkBuffer for other things.
  1057.     MoveB    TodTS,r1L        ; track pointer
  1058.     MoveB    TodTS+1,r1H        ; sector pointer
  1059. ;------
  1060. I could have used the MoveW routine here, I split it up so you could see the 
  1061. ;------
  1062. process a little easier  
  1063.     LoadW    r3,Cat    ; load address of Buffer into r3
  1064.     jsr    FollowChain    ; build our Track and Sector Table
  1065.     jsr    PGCT    ; 
  1066. now we set up our last page pointers/counters
  1067.             ; 
  1068. for the wrap-around feature in PAGE
  1069. 88$    rts
  1070. ; **********************************************************************
  1071.      @ RiSaver 
  1072. displays the directory page's in reverse order and wraps around to the last
  1073. ;      page when it encounters page #1 (page 0)
  1074. ; **********************************************************************
  1075. RiSaver:            ; called from PAGE icon to display page directory
  1076.     jsr    
  1077. RECJ    ; clear the filename box
  1078.     LoadW    r4,$8000    ; general buffer to copy block to    
  1079.     jsr    RmpPage    ; check page last used and decrement it
  1080. mide:    lda    Cat,y    ; transfer track from internal buffer listing
  1081.     sta    r1L    ; to track for use by getblock
  1082.     lda    Cat,y    ; transfer sector from internal buffer listing
  1083.     sta    r1H    ; to sector for use by getblock
  1084.     jsr    GetBlock    ; copy the block info. to internal buffer
  1085.     jmp    PDir    ; print the filenames to the display
  1086. ; **********************************************************************
  1087.      @MiSaver 
  1088. displays the directory pages' in sequential order and wraps around to the 1st
  1089. ;       page when it encounters the last page
  1090. ; **********************************************************************
  1091. MiSaver:            ; called from PAGE icon to display page directory
  1092.     jsr    
  1093. RECJ    ; clear the filename box
  1094.     LoadW    r4,$8000    ; general buffer to copy block to    
  1095.     jsr    BmpPage    ; check page last used and bump it
  1096. hide:    lda    Cat,y    ; track from internal buffer listing
  1097.     sta    r1L    ; track for use by getblock
  1098.     lda    Cat,y    ; sector from internal buffer listing
  1099.     sta    r1H    ; sector for use by getblock
  1100.     CmpWI    r1,65280    ; check for end of directory in listing (track$00 sector$FF)
  1101.     beq    Dumm    ; if match, then end of directory found, reset stuff.
  1102.     jsr    GetBlock    ; valid page so copy the block info. to buffer
  1103.     jmp    PDir    ; print filenames to display
  1104. Dumm:    jsr    ReStore    ; reset vars and counters
  1105.     jmp    MiSaver    ; display 1st dir entry
  1106. ; **********************************************************************
  1107.      @ PDir     
  1108. main routine for printing variable text to the screen
  1109. by Paul B. Murdaugh 
  1110. ;    Uses     a6,a8,a9,r0,r1,r11,a
  1111. ; **********************************************************************
  1112. PDir:    lda    #$01        ; load
  1113.     sta    a9L        ; pad # value
  1114.     lda    #$08        ; load
  1115.     sta    a9H        ; MAX file counter
  1116.     LoadW    a6,$8002        ; valid file pointer
  1117.     LoadW    a8,$8018        ; filetype pointer
  1118. lda     #112          ; Y pos to print string start address
  1119.     sta     r1H           ; (byte)
  1120.     LoadW    r0,$8005        ; 
  1121. "@address of string to print
  1122.     lda     #0            ; X pos to print string 
  1123.     sta     r11H          ; (word)
  1124.     lda     #68           ;   "
  1125.     sta     r11L          ;   "
  1126.     bra     cig        ; skip over bumpers
  1127. cih:    AddVB    9,r1H        ; bump Y pos
  1128.     lda     #0            ; X pos to print string 
  1129.     sta     r11H          ; (word)
  1130.     lda     #68           ;   "
  1131.     sta     r11L          ;   "
  1132.     jsr    PrintString        ;Print the filename to screen
  1133.     jsr    PrntPage        ;Print the page # to screen
  1134.     jsr    PrintType        ;Print filetype to screen
  1135.     AddVW    32,r0        ;bump the name pointer to the next name
  1136.     AddVW    32,a6        ;bump the valid pointer to the var.
  1137.     AddVW    32,a8        ;bump the type pointer to the var.
  1138.     inc    a9L        ;add 1 to pad number
  1139.     dec    a9H        ;drop 1 from the counter
  1140.     bne    cih        ;if counter is not 0 then do again
  1141. 30$    jsr    LastPage        ;Print last page used to screen
  1142.     lda    #$01
  1143.     sta    a9L        ;reset pad number to 1
  1144.     rts            ;finished
  1145.     sta    a9L        ;reset pad number to 1
  1146.     rts            ;finished
  1147.  number to 1
  1148.     rts            ;finished
  1149. ts            ;finished
  1150.     r1,65
  1151. ;************************************************************************
  1152.      @PrintString
  1153.  filters non-printable chars from the output to prevent lockups
  1154. by Paul B. Murdaugh
  1155. ;************************************************************************
  1156. PrintString:
  1157.     ldy    #0    ;
  1158. first we check for a valid file in the slot
  1159.     lda    (a6),y    ;check for a valid file in slot
  1160.     sta    JTF    ;save for Printfiletype varify
  1161.     beq    sht    ;skip printing it's a deleted file
  1162.     ldy    #0        ;Set Counter to 0
  1163. mad:    tya            ;
  1164.  returns here until loop finished
  1165.     cmp    #$10        ; 
  1166.      @16
  1167. is max characters in a filename 
  1168.     beq    sht        ;if = 16 then end of string/exit
  1169.     lda    (r0),y        ;Get the char to be printed
  1170.     beq    sht        ;if 0 then end of string/exit
  1171.     cmp    #$a0        ;if $a0 (shifted/space padding)
  1172.     beq    sht        ;   then end of string/exit
  1173.     and    #%01111111        ;stip off control bit
  1174.     cmp    #$20        ;if char is >= $20 (space)
  1175.     bcs    mae        ;Then print it
  1176.     lda    #'*'        ;else char = $20
  1177. mae:    sty    JRR        ; save y pointer
  1178.     jsr    SmallPutChar        ;Print the character
  1179.     ldy    JRR        ; restore y pointer
  1180.     iny            ;bump the pointer
  1181.     bne    mad        ;If pointer has not wraped around then
  1182.                 ;do loop again
  1183. sht:    rts            ;else exit routine
  1184. utine
  1185. ; **********************************************************************
  1186.      @ PrntPage 
  1187. prints the Page, and Pad numbers to the screen
  1188. from Paul B. Murdaugh
  1189. ; **********************************************************************
  1190. PrntPage
  1191.     lda     r0H       ; save value in r0 so doesn't get trashed
  1192.     pha           ; we need it again for PDir
  1193.     lda     r0L       ; 
  1194. expanded version of PushW    
  1195.     pha               
  1196.     ldy    #0
  1197.     lda     JRD    ;
  1198. "@ page number var.     
  1199.     sta     r0L            
  1200.     sty     r0H           
  1201.     lda     #1            
  1202.     sta     r11H          
  1203.     lda     #32          
  1204.     sta     r11L          
  1205.     lda     #192          
  1206.     jsr     PutDecimal    ; 
  1207. prints the PAGE number to the display
  1208.     pla    
  1209. restore r0 for next part
  1210.     sta     r0L
  1211.  expanded version of PopW        
  1212.     pla               
  1213.     sta     r0H
  1214.     lda     r0H       ; save value in r0 so doesn't get trashed
  1215.     pha           ; we need it again later for PDir
  1216.     lda     r0L    ; 
  1217. expanded version of PushW    
  1218.     pha               
  1219.     ldy     #0            
  1220.     lda     a9L         ; 
  1221. "@pad location var.
  1222.     sta     r0L           
  1223.     sty     r0H           
  1224.     lda     #1            ; X pos (word)    
  1225.     sta     r11H          
  1226.     lda     #99        
  1227.     sta     r11L          
  1228.     lda     #192          
  1229.     jsr     PutDecimal    ; 
  1230. prints the PAD number to the display
  1231.     pla           ; restore the value in r0     
  1232.     sta     r0L           
  1233.     pla               
  1234.     sta     r0H           
  1235. age used to screen
  1236.     lda    #$01
  1237.     sta    a9L        ;reset pad number to 1
  1238.     rts            ;finished
  1239.     sta    a9L        ;reset pad number to 1
  1240.     rts            ;finished
  1241.  number to 1
  1242.     rts            ;finished
  1243. ts            ;finished
  1244.     r1,65
  1245. ;************************************************************************
  1246.      @PrintType
  1247.  gets pointer to filetype byte
  1248. ;    Checks through a list of values to varify which type of file is to be printed.  
  1249. ;    and then points to another list of pointers to print text to screen. 
  1250. ;     Destroys a,x,y  
  1251. ;    Returns r11 with new value, r0 restored with previous value, prints text string
  1252. by Paul B. Murdaugh 
  1253. ;************************************************************************
  1254. PrintType:
  1255.     PushW    r0        ;save r0 for later
  1256.     lda    JTF        ;check if valid file in entry
  1257.     beq    exa        ;if = 0, entry is deleted, so print it
  1258.     ldy    #0        ;list counter
  1259.     lda    (a8),y        ;get filetype value
  1260.     ldx    #0        ;Get number on list
  1261. exc:    cmp    StrTab,x        ;See if number matches 
  1262.     beq    exd        ;If it does then process
  1263.     inx            ;Else, bump pointer 
  1264.     cpx    #SUMCUTS        ;if x <> SUMCUTS 
  1265.     bne    exc        ;then check next
  1266.     PopW    r0        ;restore r0 value due to error
  1267.     bra    exb
  1268.         ;return to PDir route w/o printing
  1269. exa:    LoadW    r0,stext        ;get pointer to deleted text
  1270.     AddVW    37,r11        ;bump r11 to new X position
  1271.     jsr    PutString        ;Print to screen
  1272.     PopW    r0            ;restore r0 value
  1273. exb:    rts            ;return to PDir route
  1274. exd:    txa            ;Put pointer to list in a
  1275.     asl    a        ;double a (a=a*2)
  1276.     tax            ;Put pointer to listvector in x
  1277.     MoveB    "StrJump,x",r0    ;Put Vector in r0
  1278.     MoveB    "StrJump,x",r0+1
  1279.     AddVW    37,r11        ;bump r11 to new X position
  1280.     jsr    PutString        ;Print to screen
  1281.     PopW    r0        ;restore r0 value
  1282. 20$    rts            ;return to PDir route
  1283.  list of values to match filetype value
  1284. StrTab:    .byte    0,1,2,3,4,5,6,7,8,9,10
  1285.     .byte    11,12,13,14,15,16,17,18,19
  1286. StrLen:
  1287. SUMCUTS    =    StrLen-StrTab        ;
  1288. equate for text/list to print
  1289. list of pointers to text strings
  1290. StrJump:    .word    atext,btext,ctext,dtext,etext,ftext,gtext,htext,itext,jtext
  1291.     .word    ktext,ltext,mtext,ntext,otext,ptext,qtext,rtext,stext
  1292. filetype text tables
  1293. atext:    .byte    "NOT_GEOS",0
  1294. btext:    .byte    "BASIC",0
  1295. ctext:    .byte    "ASSEMBLY",0
  1296. dtext:    .byte    "DATA",0
  1297. etext:    .byte    "SYSTEM",0
  1298. ftext:    .byte    "DESK_ACC",0
  1299. gtext:    .byte    "APPLICATION",0
  1300. htext:    .byte    "APPL_DATA",0
  1301. itext:    .byte    "FONT",0
  1302. jtext:    .byte    "PRINTER",0
  1303. ktext:    .byte    "INPUT_DEVICE",0
  1304. ltext:    .byte    "DISK_DEVICE",0
  1305. mtext:    .byte    "SYSTEM_BOOT",0
  1306. ntext:    .byte    "TEMPORARY",0
  1307. otext:    .byte    "AUTO_EXEC",0
  1308. ptext:    .byte    "INPUT_128",0
  1309. qtext:    .byte    "UNKNOWN17",0    ;for future use
  1310. rtext:    .byte    "UNKNOWN18",0    ;for future use
  1311. stext:    .byte    "DELETED",0
  1312.     rts            ;dummy rts for use with debugger
  1313. ; **********************************************************************
  1314.      @ LastPage 
  1315. prints the last PAGE # viewed to the screen
  1316. ; **********************************************************************
  1317. LastPage:
  1318.     jsr    LJDRA        ; clear the Last Page# area
  1319.     lda     r0H           ; save r0 value    
  1320.     pha               
  1321.     lda     r0L           
  1322.     pha               
  1323.     ldy    #0
  1324.     lda     JRD         
  1325.     sta     r0L             
  1326.     sty     r0H           
  1327.     ldx    #78        
  1328.     stx    r1H        
  1329.     lda     #1            
  1330.     sta     r11H          
  1331. rJEE:    lda     #92        
  1332.     sta     r11L          
  1333.     lda     #192        
  1334.     jsr     PutDecimal        ; 
  1335. "@print last page #
  1336.     pla               ; restore r0 value
  1337.     sta     r0L           
  1338.     pla               
  1339.     sta     r0H           
  1340.     ldy    #0        ;list counter
  1341.     lda    (a8),y        ;get filetype value
  1342.     ldx    #0        ;Get number on list
  1343. exc:    cmp    StrTab,x        ;See if num
  1344. ; **********************************************************************
  1345.      @BmpPage
  1346.  bumps the vars. for the Page T&S locations in the Cat buffer listing
  1347. ;        
  1348. used in Page Forward routine 
  1349. ; **********************************************************************
  1350. BmpPage:
  1351.     lda    JRD    ; pointer to page # used last
  1352.     beq    10$    ; if = 0, it's 1st dir. entry, do 1st entry sub
  1353. Enters here if First Page was already displayed Uses JRD for varification    
  1354. bumps Y reg by 2 for next page T & S address in Cat buffer listing
  1355.     ldy    EnterStr    ; transfer page number to Y reg  
  1356.     iny        ; add 1 to Y value   
  1357.     iny        ;
  1358.  add 1 to Y value  
  1359.     sty    EnterStr    ; set up EnterStr for next page # value
  1360.     ldx    JRD    ; set up JRD for next page
  1361.     inx        ;
  1362.  add 1 to X value  
  1363.     stx    JRD    ; and store it for next page var.    
  1364.     bra    20$    ; exit
  1365.  clears Y reg for First Page bumps x reg for JRD value 
  1366. 10$    ldx    JRD    ; load vars with pointers/counters for 1st dir entry
  1367.     inx        ; bump/up x reg    
  1368.     stx    JRD    ; set up JRD for next page
  1369.     ldy    #$00    ; set up y reg for buffer pointer
  1370.     sty    EnterStr    ; store Y for next pointer in Cat buffer
  1371. 20$    rts        ; 
  1372. returns to 'hide' address of routine MiSaver
  1373.             ; 
  1374. with value in Y reg for T&S list in Cat buffer
  1375. ; **********************************************************************
  1376.      @RmpPage
  1377.  decrements the vars. for the Page T&S locations in the Cat buffer listing
  1378.    used in Page Backward routine   by Jim Robbins
  1379. ; **********************************************************************
  1380. RmpPage:
  1381.     lda    JRD    ; page used last pointer
  1382.     beq    10$    ; if 0, it is first dir. entry
  1383.     cmp    #$01    ; see if last page was page #2
  1384.     beq    10$    ; if = , do last page display
  1385. Enters here if First Page was already displayed Uses JRD for varification    
  1386.     ldy    EnterStr    ; transfer page number to y reg  
  1387.     dey        ; sub. 1 from Y reg    
  1388.     dey        ;
  1389.  sub. 1 from Y reg  
  1390.     sty    EnterStr    ; set up EnterStr for next page
  1391.     ldx    JRD    ; set up JRD for next page
  1392.     dex        ;
  1393.  sub. 1 from X reg  
  1394.     stx    JRD    ; and store it for next page value    
  1395.     bra    20$    ; exit routine
  1396. sets counters and pointers for last page
  1397. 10$    lda    BoDet    ; load last page number
  1398.     sta    JRD    ; store it in JRD for page # diaplay
  1399.     ldy    ModPtr    ; set up reg for buffer pointer
  1400.     sty    EnterStr    ; store for next pointer in Cat buffer
  1401.     bra    20$
  1402. 15$    ldx    #$01
  1403.     stx    JRD
  1404.     ldy    #$00    ; set up y reg for buffer pointer
  1405.     sty    EnterStr    ; store Y for next pointer in Cat buffer 
  1406. 20$    rts        ; returns to 'mide' address of main routine (RiSaver)
  1407. ; **********************************************************************
  1408.      @PGCT
  1409.  sets up pointers and counters for last page of current dir. printing later
  1410. ; Used only for init. after MySaver routine has stored the new directory  T/S table
  1411. ; **********************************************************************
  1412. PGCT:
  1413.     ldx    #$00    ; start buffer pointer
  1414.     stx    ModPtr    ; store list pointer for wrap around
  1415.     stx    BoDet    ; store page number
  1416. clide:    lda    Cat,x    ; load pointer to T&S table
  1417.     beq    Stop    ; skip it, found last page (track 00 sector FF)
  1418.     ldy    BoDet    ; load Y with value in BoDet
  1419.     iny        ; bump Y
  1420.     sty    BoDet    ; store page number for last page in directory
  1421.     sta    LastTS    ; store track pointer for use with GetBlock 
  1422.     stx    ModPtr    ; store table pointer for use with Cat buffer
  1423.     lda    Cat,x
  1424.     sta    LastTS+1    ; store sector pointer
  1425.     bra    clide    ; branch if last page not fopund
  1426.     stx    ModTS    ; opps ! goofed again didn't I ! 
  1427.      @; D
  1428. ; (not really !) 
  1429.  I left this here for space to update a future version with another idea
  1430. see if you can beat me to it !
  1431. Stop:    rts
  1432. ; **********************************************************************
  1433. "@ReStore
  1434.  clears the vars. for a new disk, drive or restart of directory display
  1435. ; **********************************************************************
  1436. ReStore:
  1437.     lda    #$01
  1438.     sta    a9L        ; pad number
  1439.     lda    #$08
  1440.     sta    a9H        ; MAX file counter
  1441.     lda    #$00
  1442.     sta    JRD        ; page number
  1443.     sta    EnterStr        ; T&S pointer
  1444. ; **********************************************************************
  1445.      @LJDRA
  1446.  clears the Page Number area for a fresh slate to write on
  1447. ; **********************************************************************
  1448. LJDRA:
  1449.     jsr     i_Rectangle       ; 
  1450.     .byte     72, 78          ; 
  1451.     .word     348        ;   
  1452.     .word     506           ;  
  1453.     rts            ; returns to LastPage routine
  1454. displayed Uses JRD for varification    
  1455.     ldy    EnterStr    ; transfer page number to y reg  
  1456.     dey        ; sub. 1 from Y reg    
  1457.     dey        ;
  1458.  sub. 1 from Y reg  
  1459. ; **********************************************************************
  1460. "@ApExec
  1461.   will load and execute a GEOS application file on the current drive/disk...
  1462.   .....only when a 
  1463. "Pvalid
  1464.  filename is entered and the 
  1465. "PLOAD
  1466.  icon is clicked.....
  1467. it will 
  1468. "PNOT
  1469.  return to this DA if executed 
  1470. ;      If a
  1471. "@ non-valid
  1472.  filename is entered the routine will reset at LastGO
  1473. by Paul B. Murdaugh
  1474. ; **********************************************************************
  1475. ApExec:
  1476.     jsr    SetDevice        ;Give control to current Drive
  1477.     txa            ; transfer error status to 'a' register
  1478.     bne    15$        ;If error ignore and reset
  1479. ; You'll notice here I do not put up a dialog box telling you a goof happened.
  1480. ; No need to, as you will see the name area clear and it will reset you
  1481. ; for a new input string.  Saves a headache you can't do anything about anyway!
  1482.     jsr    OpenDisk        ;Open the disk 
  1483.     bne    15$        ;If error ignore and reset
  1484.     LoadW    r6,SMKA        ; filename you typed in EXACTLY
  1485.     jsr    FindFile
  1486.     bne    15$        ;If error ignore and reset
  1487.     ldy    #22        ; Get Geos File type
  1488.     lda    (r5),y        ; from directory entry found
  1489.     cmp    #$6        ; is it an Application?
  1490.     bne    15$        ; No? then reset loop
  1491.      PNOTE
  1492. We can only run applications from a desk accessory - hence the limitation.
  1493. If you made this a standard application you could run a varitey of GEOS filetypes. 
  1494. like an alternate desktop or such..... 
  1495.     LoadB    r0L,#$00        ; YES ! so continue loading
  1496.     LoadW    r6,SMKA        ; the file and run it
  1497.     LoadB    r10L,#$00        ; RCVR_OPTS no longer used, set to 0
  1498.     jmp    GetFile        
  1499.     bra    20$        ; skip next
  1500. 15$    jmp    
  1501. LastGO    ; this routine will restart input loop if an error occurred
  1502. 20$    rts        ; rts here for debugger seperation only
  1503.             ; so routine label will not run-over
  1504.             ; 
  1505.  necessary for program flow itself.
  1506.      @** NOTE **
  1507. ; We could enhance this routine to search 
  1508.      @ALL
  1509.  active disk drives for the application
  1510. ; we want to run by using a variation of the SwapDrive routine.
  1511. ; Since this is a Desk Accessory space is a concern.
  1512. ; You could make this a standard application if you chose to.
  1513. short excuse is I was too lazy to add it in.....
  1514.      @; D
  1515.      @; D
  1516. .ramsect
  1517. these next four vars were used from Rob Knops RPN DA source code
  1518. appzpage:    .block    $9e    ;holds application's zero page word-registers
  1519. Save380:    .block    $80    ;
  1520. not used this version 
  1521. GEOSzero:    .block    $41
  1522. not used this version 
  1523. F_ENTRY:    .block    1    ;Flag for Entry in progress
  1524. JRA:    .block    1    ;
  1525. not used this version
  1526. JRR:    .block    1    ;pointer for smaputchar y counter
  1527. JRC:    .block    1    ;
  1528. not used this version
  1529. JRD:    .block    1    ;pointer for current directory page
  1530. JRE:    .block    1    ;
  1531. not used this version
  1532. JRF:    .block    1    ;value for valid file in slot (filename)
  1533. JTF:    .block    1    ;value for valid file in slot (filetype)
  1534. EnterStr:    .block    1    ;Current T&S of Directory var.
  1535. EnterPos:    .block    1    ;
  1536. not used this version
  1537. Cat:    .block    512    ;directory page table
  1538. DAEnd:
  1539. ; necessary to locate end of DA for Linker and swap file(s)
  1540.  file(s)
  1541. swap file(s)
  1542. ;Open the disk 
  1543.     bne    15$        ;If error ignore and reset
  1544.     LoadW    r6,SMKA        ;
  1545. ;    jsr    MySaver    ;
  1546.     jsr    
  1547. L139R    ; clear the filename box
  1548.     LoadW    r4,$8000    ; general buffer to copy block to    
  1549.     MoveW    
  1550. CatchBuffer
  1551. ,r1  ; location T&S of block to write to
  1552.     jsr    Ge
  1553.