home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / bbs / ff870.lha / SoftProtect / SoftProtect.s < prev   
Text File  |  1991-03-10  |  6KB  |  312 lines

  1.  
  2.  ;SoftProtect.s . It is a software disk protection mechanism
  3.  ;and when asked by the user prevents writes on a write-enabled disk
  4.  ;assembled with Profimat Assembler.
  5.  ;Copyright © kamran Karimi
  6.  
  7.  
  8. ExecBase    equ 4
  9. FindTask    equ -294
  10. OpenLib     equ -408
  11. CloseLib    equ -414
  12. WaitPort    equ -384
  13. GetMsg      equ -372
  14. ReplyMsg    equ -378
  15. Delay       equ -198
  16. OpenWindow  equ -204
  17. CloseWindow equ -72
  18. PrintIText  equ -216
  19.        
  20.  
  21. Start:
  22.  moveq   #0,d7
  23.  movem.l d0/a0,-(a7)       ;save command line parameters
  24.  move.l  #20,d6         ;possible return code to DOS
  25.  move.l  ExecBase,a6
  26.  movea.l #0,a1
  27.  jsr     FindTask(a6)
  28.  move.l  d0,a4
  29.  tst.l   $ac(a4)
  30.  bne     FromCLI
  31.  
  32. FromWorkBench:        ;get workbench message
  33.  lea     $5c(a4),a0
  34.  jsr     WaitPort(a6)
  35.  lea     $5c(a4),a0
  36.  jsr     GetMsg(a6)
  37.  bra     StackAdjust
  38.  
  39. FromCLI:
  40.  movem.l (a7)+,d0/a0  ;command line parameters
  41.  subq    #1,d0
  42.  beq     NoParam
  43.  
  44. LoopParam1:
  45.  cmpi.b  #' ',(a0)+
  46.  bne     Found
  47.  dbra    d0,LoopParam1
  48.  bra     NoParam
  49. Found:
  50.  suba.l  #1,a0
  51.  cmpi.b  #'n',(a0)
  52.  beq     FoundN
  53.  cmpi.b  #'N',(a0)
  54.  bne     NoParam
  55. FoundN:
  56.  adda.l  #1,a0
  57.  cmpi.b  #'o',(a0)
  58.  beq     FoundO
  59.  cmpi.b  #'O',(a0)
  60.  bne     NoParam
  61. FoundO:
  62.  move.w  #$86,SelAddr
  63.  moveq   #1,d7
  64.  bra     NoParam
  65.  
  66. StackAdjust:
  67.  movem.l (a7)+,d0/a0
  68. NoParam:
  69.  moveq   #0,d5          ;flag for In Effect/Not In Effect determination
  70.  lea     DOSName,a1
  71.  jsr     OpenLib(a6)
  72.  move.l  d0,DOSBase
  73.  beq     NoDOS
  74.  lea     IntuitionName,a1
  75.  jsr     OpenLib(a6)
  76.  move.l  d0,IntBase
  77.  beq     NoIntuition
  78.  move.l  d0,a6
  79.  lea     WindowParam,a0
  80.  jsr     OpenWindow(a6)
  81.  move.l  d0,WindowHandler
  82.  beq     NoWindow
  83.  move.l  WindowHandler,a0
  84.  move.l  50(a0),a0
  85.  lea     MyName,a1
  86.  move.l  #4,d0
  87.  move.l  #12,d1
  88.  jsr     PrintIText(a6)
  89.  move.l  DOSBase,a6
  90.  move.l  #100,d1
  91.  jsr     Delay(a6)
  92.  move.l  IntBase,a6
  93.  move.l  WindowHandler,a0
  94.  jsr     CloseWindow(a6)
  95.  move.l  #MyGadget,GadAddr
  96.  lea     WindowParam,a0
  97.  jsr     OpenWindow(a6)
  98.  move.l  d0,WindowHandler
  99.  beq     NoWindow
  100.  move.l  WindowHandler,a0
  101.  move.l  50(a0),a0
  102.  lea     MyText,a1
  103.  move.l  #4,d0
  104.  move.l  #12,d1
  105.  jsr     PrintIText(a6)
  106.  tst.l   d7
  107.  bne     Enforce
  108.  moveq   #1,d5
  109.  move.l  ExecBase,a6
  110.  
  111. WaitOn:                     ;this is the main loop
  112.  move.l  WindowHandler,a0
  113.  move.l  86(a0),d4
  114.  move.l  d4,a0
  115.  jsr     WaitPort(a6)
  116.  move.l  d4,a0
  117.  jsr     GetMsg(a6)
  118.  move.l  d0,a0
  119.  move.l  20(a0),d6
  120.  move.l  d0,a1
  121.  jsr     ReplyMsg(a6)
  122.  cmpi.l  #$200,d6        ;Windowclose
  123.  beq     Quit
  124.  
  125. GadgetChosen:
  126.  move.w  SelAddr,d6
  127.  andi.w  #$80,d6       ;SELECTED?
  128.  beq     Allow
  129.  
  130. Enforce:
  131.  moveq   #0,d5
  132.  ori.b   #$c,$bfe201
  133.  andi.b  #$f3,$bfe001
  134.  move.l  DOSBase,a6
  135.  move.l  #25,d1
  136.  jsr     Delay(a6)
  137.  ori.b   #$4,$bfe001
  138.  move.l  #25,d1
  139.  jsr     Delay(a6)
  140.  andi.b  #$fb,$bfe201
  141.  move.l  ExecBase,a6
  142.  Bra     WaitOn
  143.  
  144. Allow:
  145.  moveq   #1,d5
  146.  ori.b   #$c,$bfe201
  147.  andi.b  #$f3,$bfe001
  148.  move.l  DOSBase,a6
  149.  move.l  #25,d1
  150.  jsr     Delay(a6)
  151.  ori.b   #$4,$bfe001
  152.  move.l  #25,d1
  153.  jsr     Delay(a6)
  154.  andi.b  #$f3,$bfe201
  155.  move.l  ExecBase,a6
  156.  Bra     WaitOn
  157.  
  158.  
  159. Quit:
  160.  tst.l   d5
  161.  bne     NoProtect
  162.  ori.b   #$c,$bfe201
  163.  andi.b  #$f3,$bfe001
  164.  move.l  DOSBase,a6
  165.  move.l  #25,d1
  166.  jsr     Delay(a6)
  167.  ori.b   #$4,$bfe001
  168.  move.l  #25,d1
  169.  jsr     Delay(a6)
  170.  andi.b  #$f3,$bfe201
  171.  
  172. NoProtect:
  173.  moveq  #0,d6
  174.  move.l IntBase,a6
  175.  move.l WindowHandler,a0
  176.  jsr    CloseWindow(a6)
  177.  
  178. NoWindow:
  179.  move.l ExecBase,a6
  180.  move.l IntBase,a1
  181.  jsr    CloseLib(a6)
  182.  
  183. NoIntuition:
  184.  move.l ExecBase,a6
  185.  move.l DOSBase,a1
  186.  jsr    CloseLib(a6)
  187.  
  188. NoDOS:
  189.  move.l d6,d0
  190.  rts
  191.  
  192.  CODE
  193.  
  194. IntuitionName:  dc.b 'intuition.library',0
  195. DOSName:        dc.b 'dos.library',0
  196. WindowHandler:  dc.l 0
  197. IntBase:        dc.l 0
  198. DOSBase:        dc.l 0
  199.  
  200. MyText:         dc.b 1,0,1,0
  201.                 dc.w 1,0
  202.                 dc.l 0
  203.                 dc.l Texte
  204.                 dc.l 0
  205. Texte:          dc.b 'Allow Floppy Writes?',0,0
  206.  
  207.  
  208. MyName:         dc.b 2,0,1,0
  209.                 dc.w 35,4
  210.                 dc.l 0
  211.                 dc.l Name1
  212.                 dc.l MyName2
  213. Name1:          dc.b ' SoftProtect!',0
  214.  
  215. MyName2:        dc.b 1,0,1,0
  216.                 dc.w 35,16
  217.                 dc.l 0
  218.                 dc.l Name2
  219.                 dc.l 0
  220. Name2:         dc.b 'By Kamran Karimi',0,0
  221.  
  222.  
  223. WindowParam:
  224.  dc.w 10
  225.  dc.w 5
  226.  dc.w 200
  227.  dc.w 40
  228.  dc.b -1
  229.  dc.b -1
  230.  dc.l $220
  231.  dc.l $e
  232. GadAddr:
  233.  dc.l 0
  234.  dc.l 0
  235.  dc.l WindowName
  236.  dc.l 0
  237.  dc.l 0
  238.  dc.w 0
  239.  dc.w 0
  240.  dc.w 0
  241.  dc.w 0
  242.  dc.w 1
  243.  
  244. WindowName: dc.b 'SoftProtect',0
  245.  
  246. MyGadget:
  247.  dc.l 0
  248.  dc.w 150
  249.  dc.w 23
  250.  dc.w 32
  251.  dc.w 13
  252. SelAddr:
  253.  dc.w $6       ;Flags
  254.  dc.w $102     ;activation
  255.  dc.w 1
  256.  dc.l ImOK
  257.  dc.l ImNO
  258.  dc.l 0
  259.  dc.l 0
  260.  dc.l 0
  261.  dc.w 1
  262.  dc.l 0
  263.  
  264.  DATA
  265.  
  266. ImOK:
  267.  dc.w 0,0,32,13
  268.  dc.w 1
  269.  dc.l ImOKData
  270.  dc.b 2,1
  271.  dc.l 0
  272.  
  273. ImOKData:
  274.  dc.l %00000000000000000000000000000000
  275.  dc.l %00001111111000000111100011100000
  276.  dc.l %00111000001110000011100011100000
  277.  dc.l %00111000001110000011100111000000
  278.  dc.l %00111000001110000011101110000000
  279.  dc.l %00111000001110000011111100000000
  280.  dc.l %00111000001110000011111100000000
  281.  dc.l %00111000001110000011100111000000
  282.  dc.l %00111000001110000011100011100000
  283.  dc.l %00111000001110000011100001110000
  284.  dc.l %00111000001110000011100001110000
  285.  dc.l %00001111111000000111100001110000
  286.  dc.l %00000000000000000000000000000000
  287.  
  288. ImNO:
  289.  dc.w 0,0,32,13
  290.  dc.w 1
  291.  dc.l ImNOData
  292.  dc.b 2,1
  293.  dc.l 0
  294.  
  295. ImNOData:
  296.  dc.l %00000000000000000000000000000000
  297.  dc.l %00111000000011100000111111100000
  298.  dc.l %00111100000011100011100000111000
  299.  dc.l %00111111000011100011100000111000
  300.  dc.l %00111011100011100011100000111000
  301.  dc.l %00111001110011100011100000111000
  302.  dc.l %00111000111011100011100000111000
  303.  dc.l %00111000011111100011100000111000
  304.  dc.l %00111000001111100011100000111000
  305.  dc.l %00111000000111100011100000111000
  306.  dc.l %00111000000011100011100000111000
  307.  dc.l %00111000000011100000111111100000
  308.  dc.l %00000000000000000000000000000000
  309.  
  310.  end
  311.  
  312.