home *** CD-ROM | disk | FTP | other *** search
- ***********************************
- *** CrMPW V1.0 ***
- *** (c) 1993 Thomas Schwarz ***
- ***********************************
-
- incdir dh0:ass/Include/
- include dos/dos_lib.i
- include exec/exec_lib.i
- include utility/tagitem.i
- include libraries/CrM.i
- include libraries/CrM_lib.i
-
- ***************************************
- CALL MACRO
- jsr _LVO\1(a6)
- ENDM
- CALLEXEC MACRO
- move.l 4.w,a6
- CALL \1
- ENDM
- CALLDOS MACRO
- move.l _DOSBase(pc),a6
- CALL \1
- ENDM
- ***************************************
- main:
- lea CLIParas(pc),a1
- movem.l d0/a0,(a1) ;save CLI-Parameters
-
- ** Open dos.library: **
- lea DOSName(pc),a1
- CALLEXEC OldOpenLibrary
- lea _DOSBase(pc),a0
- move.l d0,(a0)
- beq.w .End
-
- ** Get Output Handle for the CLI: **
- move.l d0,a6
- CALL Output
- lea OutHandle(pc),a0
- move.l d0,(a0)
- beq.w .CloseDOS
-
- ** Open CrM.library: **
- lea CrMName(pc),a1
- moveq #4,d0
- CALLEXEC OpenLibrary
- lea _CrMBase(pc),a0
- move.l d0,(a0)
- beq.w .nocrm
-
- lea InitTxt(pc),a0
- bsr.w PrintText
-
- movem.l CLIParas(pc),d0/a0
- tst.l d0
- beq.w .printinfo
- clr.b -1(a0,d0.w) ;replace <cr> with 0
- bsr.w SkipSpaces
- move.b (a0),d1
- beq.w .printinfo ;no parameters
- bclr #5,d1 ;upcase
- cmp.b #"A",d1
- beq.s .checkadd ;check for following <Space>
- cmp.b #"R",d1
- beq.s .checkremove ;check for following <Space>
- .switch:
- moveq #0,d0
- .checkcont:
- ; lea PW(pc),a1
- ; move.l a0,(a1) ;store address of pw
- tst.b (a0)
- beq.w .nopw ;TextEnd!
- move.l d0,d7
- move.l _CrMBase(pc),a6
- CALL cmProcessPW
- tst.l d7
- beq.w .success ;Operation=Switch -> always successfull
- cmp.w d0,d7
- beq.w .success ;function did what i wanted!
- lea NoAddTxt(pc),a0
- cmp.w #cm_AddPW,d7
- beq.s .schluss
- lea NoRemTxt(pc),a0
- ; cmp.w #cm_RemovePW,d7 ;in the present version
- ; beq.s .schluss ;of the library this case
- ; lea NoRemAllTxt(pc),a0 ;can never occur!
- .schluss:
- bsr.w PrintText ;print result...
-
- ** Close CrM.library **
- move.l _CrMBase(pc),d0
- beq.s .CloseDOS
- move.l d0,a1
- CALLEXEC CloseLibrary
-
- ** Close dos.library **
- .CloseDOS:
- move.l _DOSBase(pc),a1
- CALLEXEC CloseLibrary
- .End: moveq #0,d0
- rts
- *-------
- .checkadd:
- cmp.b #" ",1(a0)
- bne.s .switch ;no <Space>
- moveq #cm_AddPW,d0
- addq.l #1,a0
- bsr.w SkipSpaces
- bra.s .checkcont
- *-------
- .checkremove:
- cmp.b #" ",1(a0)
- bne.s .switch ;no <Space>
- moveq #cm_RemovePW,d0
- addq.l #1,a0
- bsr.s SkipSpaces
- cmp.b #"a",(a0)
- bne.s .checkcont
- cmp.b #"l",1(a0)
- bne.w .checkcont
- cmp.b #"l",2(a0)
- bne.w .checkcont
- tst.b 3(a0)
- bne.w .checkcont
- moveq #cm_RemoveAll,d0
- bra.w .checkcont
- *-------
- .success:
- lea AddedTxt(pc),a0
- cmp.w #cm_AddPW,d0
- beq.s .schluss
- lea RemovedTxt(pc),a0
- cmp.w #cm_RemovePW,d0
- beq.s .schluss
- lea RemAllTxt(pc),a0
- bra.w .schluss
- *-------
- .nopw: lea NoPWTxt(pc),a0
- bra.w .schluss
- *-------
- .nocrm:
- lea NoCrMTxt(pc),a0
- bra.w .schluss
- .printinfo:
- lea InfoTxt(pc),a0
- bra.w .schluss
- *------------
- ** Print some text to the CLI **
- PrintText: ** a0:Text (0-terminated)
- movem.l d0-d3/a0-a1/a6,-(sp)
- move.l a0,d2
- moveq #-1,d3
- .count: addq.l #1,d3
- tst.b (a0)+
- bne.s .count
- move.l OutHandle(pc),d1
- CALLDOS Write
- movem.l (sp)+,d0-d3/a0-a1/a6
- rts
- *----------
- ** Skip spaces in the String at a0 (set a0 to the first char after the spaces)
- SkipSpaces: ** a0:String (0-terminated)
- tst.b (a0)
- beq.s .End
- cmp.b #" ",(a0)+
- beq.s SkipSpaces
- subq.l #1,a0
- .End: rts
- ***************************************
- _DOSBase: dc.l 0
- _CrMBase: dc.l 0
- OutHandle: dc.l 0
- CLIParas: dc.l 0,0
- ;PW: dc.l 0
- DOSName: dc.b "dos.library",0
- CrMName: CRMNAME
- NoCrMTxt: dc.b "Could not open CrM.library v4+",10,0
- InitTxt: dc.b 27,"[33;1mCrMPW",27,"[0;33m V1.0",27,"[32m -- ",27,"[0m",0
- InfoTxt: dc.b "(c) 1993 Thomas Schwarz",10,10
- dc.b "Usage: CrMPW <command> <pw>",10,10
- dc.b " <pw>: password to add/remove",10
- dc.b "<command>: a ·· Add PW to List",10
- dc.b " r ·· Remove PW from List",10
- dc.b " r all ·· Remove all PWs from List",10
- dc.b " no command ·· Switch state",10,0
- AddedTxt: dc.b "added pw to list",10,0
- RemovedTxt: dc.b "removed pw from list",10,0
- RemAllTxt: dc.b "removed all pws from list",10,0
- NoAddTxt: dc.b "pw NOT added: already in list",10,0
- NoRemTxt: dc.b "pw NOT removed: not in list",10,0
- ;NoRemAllTxt: dc.b "nothing to remove!",10,0
- NoPWTxt: dc.b "NO pw given!",10,0
-