home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d544 / erasedisk.lha / EraseDisk / EraseDisk.asm < prev    next >
Assembly Source File  |  1991-09-18  |  8KB  |  321 lines

  1.          opt l-
  2.         
  3. *************************************************
  4. * Programm: EraseDisk                    *
  5. * Version:  V0.69                    *
  6. * Kickstart: 1.2/1.3                    *
  7. * Sprache:   Devpac Assembler                *
  8. * Datum:     29.5.91                    *
  9. * Autor:     Otto Bernhart                  *
  10. * P.S:     * erased Disk in beliebigen Laufw.   *
  11. *       * nur unter CLI                *
  12. * Greetings: Elke, Nicole, Sabine, Peter,       *
  13. *            Sandra, Michi, Heiko, Heli, Mum,   *
  14. *            Dad, Karli, Pechti, Fam.Jurak,     *
  15. *            and all the pretty Girls out there.* 
  16. *************************************************
  17.  
  18.   include df0:include/exec/exec_lib.i
  19.   include df0:include/libraries/dos_lib.i
  20.   include df0:include/intuition/intuition_lib.i
  21.  
  22. * Parameter auswerten und Laufwerk in "Laufwerk" merken
  23.  
  24. start1:
  25.   movem.l d0-d7/a0-a6,-(a7)        ; alle Register retten
  26.   cmp.b #"?",(a0)            ; ? gewählt ?
  27.   bne.s start2                ; nein -> normaler Start
  28.   moveq #1,d0
  29.   move.l d0,merker            ; ja in "merker" notieren
  30. start2:
  31.   subq.w #1,d0
  32.   beq.s parameterlos            ; ohne Parameter = df0:
  33. suche:
  34.   cmp.b #$20,(a0)
  35.   bne.s erfolg
  36.   addq    #1,a0
  37.   dbf d0,suche
  38. raus:
  39.   tst.b merker                ; "?" gewählt?
  40.   bne  OpenDos                ; Ja -> bereite Ausgabe vor
  41.   movem.l (a7)+,d0-d7/a0-a6
  42.   moveq #0,d0               ; Kommentarlos
  43.   rts                    ; raus weil falscher Kommentar
  44. erfolg:
  45.   cmp.b #"d",(a0)
  46.   beq.s gut
  47.   cmp.b #"D",(a0)
  48.   bne.s raus
  49. gut:
  50.   addq.l #1,a0
  51.   cmp.b  #"f",(a0)
  52.   beq.s gut2
  53.   cmp.b  #"F",(a0)
  54.   bne.s raus
  55. gut2:
  56.   addq  #1,a0
  57.   moveq #0,d7
  58.   move.b (a0),d7
  59.   cmp.b #$30,d7
  60.   blo.s raus
  61.   cmp.b #$33,d7
  62.   bhi.s raus
  63.   sub.b #$30,d7
  64.   move.l d7,Laufwerk       
  65.   bra.s OpenDos                ; Laufwerk in d7
  66. parameterlos:
  67.   moveq  #0,d0
  68.   move.l d0,Laufwerk
  69.  
  70. *************** Start des Hauptprogramms **************
  71.  
  72. * Dos-Library öffnen
  73.  
  74. OpenDos:
  75.   movem.l (a7)+,d0-d7/a0-a6          ; Register zurückholen (wichtig)
  76.   lea.l dosname,a1            ; Zeiger auf Dosname
  77.   moveq #0,d0                ; Version egal
  78.   CALLEXEC OpenLibrary          ; öffnen
  79.   move.l d0,_DOSBase            ; Zeiger merken
  80.   tst.l merker    
  81.   bne   Info                ; "?" angewählt? -> InfoTextausgeben
  82. OpenInt:
  83.   lea.l intname,a1
  84.   moveq #0,d0 
  85.   CALLEXEC OpenLibrary
  86.   move.l d0,_IntuitionBase
  87.   
  88. OutputHandle:
  89.   CALLDOS Output
  90.   move.l d0,d4
  91.  
  92. ResSpeicher:
  93.   move.l #5632,d0            ; größe
  94.   move.l #$10002,d1             ; Bedingungscode
  95.   CALLEXEC AllocMem
  96.   move.l d0,TrackPuffer         ; Adresse Puffer
  97.  
  98. A lea.l portadr,a1            ; Zeiger auf Portstruktur
  99.   CALLEXEC AddPort            ; Port anmelden
  100.  
  101. B sub.l a1,a1                ; A1 löschen
  102.   CALLEXEC FindTask            ; Zeiger auf eigenen Task holen
  103.   move.l d0,portadr+16          ; in Portstruktur eintragen
  104.  
  105.  
  106. OpenDevice:
  107.   move.l Laufwerk,d0
  108.   lea.l iorequest,a1            ; Zeiger auf IORequest-Struktur
  109.   lea.l devname,a0            ; Zeiger auf Devicenamen
  110.   moveq #0,d1                ; keine Flags
  111.   CALLEXEC OpenDevice            ; Device öffnen
  112.   tst.l d0
  113.   bne error                 ; Fehler beim Öffnen
  114.  
  115. *********** Starttext ausgeben und auf Return warten ************
  116.  
  117. Work:
  118.   move.l d4,d1                ; Ausgabehandle
  119.   move.l #EraseText,d2
  120.   moveq  #len1,d3            ; Länge String
  121.   CALLDOS Write                 ; String ausgeben
  122. WaitReturn:
  123.   CALLDOS Input                ; Eingabehandle ermitteln
  124.   move.l d0,d5                ; in d5 merken
  125.   move.l d5,d1
  126.   move.l #buffer,d2
  127.   moveq #1,d3
  128.   CALLDOS Read                ; auf Return warten  
  129.  
  130. ************** Eingabe Start- & EndTrack *************************
  131.  
  132. Test1:
  133.   lea.l  iorequest,a1
  134.   move.w #14,command
  135.   CALLEXEC DoIO
  136.   move.l IOerror,d5
  137.   beq.s TestProtection
  138.  
  139. NotInserted:
  140.   moveq  #1,d0                ; Typ: Recovery ALERT
  141.   moveq  #45,d1                ; Höhe der Alertbox
  142.   lea.l  IText,a0            ; Textadresse
  143.   CALLINT DisplayAlert
  144.   move.l d0,Maustaste
  145.   tst.l  Maustaste
  146.   bne    Work                ; 0 = rechte Taste        
  147.   bra fini
  148.  
  149. TestProtection:
  150.   lea.l  iorequest,a1
  151.   move.w #15,command
  152.   CALLEXEC DoIO
  153.   move.l IOerror,d5
  154.   beq.s   GOon
  155.  
  156. Protected:
  157.   moveq #1,d0                ; Typ: Recovery ALERT
  158.   moveq #45,d1                ; Höhe der Box
  159.   lea.l PText,a0            ; Textadresse
  160.   CALLINT DisplayAlert
  161.   move.l d0,Maustaste
  162.   tst.l  Maustaste
  163.   bne    Work
  164.   bra    fini   
  165.  
  166. GOon:
  167.   lea.l  iorequest,a1            ; Zeiger auf IORequest
  168.   move.w #11,command
  169.   move.l #160*5632,IOlenght         ; 160 Tracks
  170.   move.l #TrackPuffer,IOdata        ; TrackPuffer
  171.   moveq  #0,d0
  172.   move.l d0,IOoffset            ; starte Track 0
  173.   CALLEXEC DoIO                ; Device starten
  174.  
  175. Message:
  176.   move.l d4,d1
  177.   move.l #FinishText,d2
  178.   moveq  #len4,d3
  179.   CALLDOS Write
  180.  
  181. Motoraus:
  182.   lea.l  iorequest,a1
  183.   move.w #9,command    
  184.   moveq  #0,d0                ; Kommando: Motor aus
  185.   move.l d0,IOlenght               ; löschen für Motor an
  186.   CALLEXEC DoIO                 ; aktiviere Device
  187.  
  188. fini:
  189. * Speicher wieder freigeben  
  190.  
  191.   move.l TrackPuffer,a1         ; Startadresse
  192.   move.l #5632,d0            ; Speichergröße
  193.   CALLEXEC FreeMem
  194.  
  195. * Trackdisk.device schließen        
  196.   lea.l iorequest,a1
  197.   CALLEXEC CloseDevice             ; Device schließen
  198.  
  199. error:
  200. * Port abmelden                
  201.   lea.l portadr,a1
  202.   CALLEXEC RemPort            ; Port abmelden
  203.  
  204. * IntLib schließen
  205.   move.l _IntuitionBase,a1
  206.   CALLEXEC CloseLibrary
  207.  
  208. * DosLib schließen
  209.  
  210. CloseDos:
  211.   move.l _DOSBase,a1
  212.   CALLEXEC CloseLibrary    
  213.   
  214.   moveq #0,d0                ; Errorflag löschen
  215.   rts                    ; BABA
  216.  
  217. ***************** Unterprogramme ***************
  218.  
  219. Info:
  220.   CALLDOS Output
  221.   move.l d0,d1
  222.   move.l #InfoText,d2
  223.   move.l #InfoTextlen,d3
  224.   CALLDOS Write
  225.   bra.s CloseDos
  226.   
  227. * Strukturen
  228.  
  229. portadr dc.l 0
  230.     dc.l 0
  231.     dc.b 4                ; Typ = Message-Port
  232.     dc.b 0                ; Priorität = 0
  233.     dc.l portname            ; Zeiger auf Portnamen
  234.     dc.b 0
  235.     dc.b 31                ; Nummer von Signal-Bit
  236.     dc.l 0,0,0,0
  237.     dc.b 0,0
  238. ; ------------------------------------------------------
  239.        
  240. iorequest     dc.l 0,0
  241.         dc.b 5             ; Typ = Message
  242.         dc.b 0
  243.         dc.l 0
  244.         dc.l portadr         ; Zeiger auf Reply-Port
  245.         dc.w 48             ; Strukturgröße in Byte
  246.         dc.l 0,0
  247. command        dc.w 0            ; Kommando: formatieren
  248.         dc.w 0
  249. IOerror        dc.l 0
  250. IOlenght    dc.l 0              ; 160 Tracks formatieren
  251. IOdata        dc.l 0
  252. IOoffset    dc.l 0            ; starte bei Track 0
  253.  
  254. ; ------------------------------------------------------
  255.  
  256. * Datenbereich        
  257.  
  258. _DOSBase     dc.l 0
  259. _IntuitionBase  dc.l 0
  260. dosname     dc.b "dos.library",0
  261. intname         dc.b "intuition.library",0
  262. portname    dc.b "trackdisk.port",0
  263. devname        dc.b "trackdisk.device",0
  264.  
  265. Laufwerk        dc.l 0
  266. TrackPuffer     dc.l 0
  267. buffer          ds.b 1
  268. STbuffer    ds.l 0
  269. ETbuffer    ds.l 0
  270. Maustaste     ds.l 1
  271. merker          dc.l 0
  272.  
  273. EraseText    dc.b $9b,"1;33;40m"
  274.         dc.b 10,10,10,"              EraseDisk V0.69",10
  275.         dc.b $9b,"0;31;40m"
  276.                 dc.b    "              Please insert disk to be erased and press RETURN:"
  277. len1            equ *-EraseText    
  278. FinishText      dc.b 10,"                   ...all done!           AUTHOR: "
  279.           dc.b $9b,"0;32;40mOtto Bernhart",10
  280.           dc.b $9b,"0;31;40m"
  281. len4            equ *-FinishText
  282.  
  283. ************************* ALERT-Texte ************************
  284.  
  285. PText           dc.b 0,120,16,"ATTENTION !  Disk in selected drive is write-protected!!!"
  286.         dc.b 0,$FF,0,17,32," left button: CONTINUE                                 right button: CANCEL",0,0
  287.         
  288. IText           dc.b 0,120,16,"     ATTENTION ! No disk in selected drive!!!"        
  289.         dc.b 0,$FF,0,17,32," left button: CONTINUE                                 right button: CANCEL",0,0
  290.     
  291. ************************* INFO-Text **********************
  292.  
  293. InfoText:
  294.         dc.b 12,10,10
  295.         dc.b $9b,"1;33;40mEraseDisk V0.69"
  296.         dc.b $9b,"0;31;40m by "
  297.         dc.b $9b,"1;33;40mOtto Bernhart "
  298.         dc.b $9b,"0;31;40m29/5/91",10,10
  299.         dc.b $9b,"1;32;40m       USAGE: "
  300.         dc.b $9b,"0;31;40m" 
  301.         dc.b " EraseDisk [DRIVE],[?]",10,10
  302.         
  303.         dc.b "       This program erases a disk in a selected drive.",10
  304.         dc.b "       (It sets all bits zero)",10,10
  305.         
  306.         dc.b "       Write to me: Otto Bernhart",10
  307.         dc.b "                    Postfach 10",10
  308.         dc.b "                    8423 St.Veit a.V.",10
  309.         dc.b "                    AUSTRIA",10,10
  310.         
  311.         dc.b $9b,"0;32;40m"
  312.         dc.b "       EraseDisk is a PUBLIC DOMAIN program,",10
  313.         dc.b "       but if you like it, please send $5 (or more)",10
  314.         dc.b "       to the adress above. (I`m a poor pupil)",10
  315.         dc.b $9b,"0;31;40m",10,10
  316.         dc.b " EraseDisk is dedicated to all the pretty girls out there!!!",10,10
  317.  
  318. InfoTextlen    equ  *-InfoText 
  319.         even
  320.     
  321.