ùúùú INCDIR INCLUDES: INCLUDE Exec.offs INCLUDE Dos.offs INCLUDE Intuition.offs INCLUDE Commodities.offs INCLUDE Console.offs INCLUDE Graphics.offs INCLUDE GadTools.offs INCDIR INCLUDES: INCLUDE exec/memory.i INCLUDE exec/macros.i INCLUDE libraries/dosextens.i INCLUDE libraries/commodities.i INCLUDE intuition/intuition.i INCLUDE libraries/gadtools.i TRUE equ 1 FALSE equ 0 ConChars_SIZE equ 56 EditB_SIZE equ 512*4 MaxChars equ 38 X.pos equ 6 Y.pos equ 1 ;Rawkey definition R_CapsLock equ $62 R_Ctrl equ $63 R_LAlt equ $64 R_RAlt equ $65 R_LShift equ $60 R_RShift equ $61 R_Enter equ $44 R_BckSpace equ $41 R_Del equ $46 R_Esc equ $45 R_LArrow equ $4f R_RArrow equ $4e R_UArrow equ $4c R_DArrow equ $4d R_F1 equ $50 R_F2 equ $51 R_F3 equ $52 R_F4 equ $53 R_F5 equ $54 R_F6 equ $55 R_F7 equ $56 R_F8 equ $57 R_F9 equ $58 R_F10 equ $59 ;private program's flags PFLG_OnTop equ 1 PFLG_OnWorkbench equ 2 PFLG_Beep equ 4 PFLG_WordInRam equ 8 PFLG_NoPLChars equ 16 PFLG_OnTopPublic equ 32 PFLG_Stop equ 64 ;private program's structure STRUCTURE ProgX,0 LONG ProgFlags LONG Dos_B LONG Intuition_B LONG Exec_B LONG Graphics_B LONG GadTools_B LONG Console_B LONG Window_B LONG Screen_B LONG VisualI_B LONG Menu_B LONG Comm_B LONG Custom_B LONG CxBroker_B LONG CxFilter_B LONG MsgPort_B LONG MsgPort1_B LONG TmpFH_B LONG BigOrt_B LONG BigOrt_S LONG Class_C WORD Code_C LONG Qualifier_C LONG IAddress_C LONG CxMsgType LONG CxMsgID LONG PortBitMask STRUCT ConIORequest,MP_SIZE STRUCT ConChars,ConChars_SIZE LONG ConResult STRUCT Edit_Buff,EditB_SIZE+1 STRUCT Mark_Buff,EditB_SIZE+1 LONG Edit_S LONG Actual_Pos WORD SMark WORD EMark WORD WMark WORD YOffset STRUCT Print_Buff,MaxChars+1 STRUCT Convert,256 LABEL ProgX_SIZE ExecBase equ 4 ; movem.l d1-d7/a0-a6,-(sp) suba.l a1,a1 movea.l [ExecBase].w,a6 jsr _LVOFindTask(a6) movea.l d0,a4 moveq #0,d0 tst.l pr_CLI(a4) ; bra FromCLI bne.s FromCLI lea pr_MsgPort(a4),a0 jsr _LVOWaitPort(a6) lea pr_MsgPort(a4),a0 jsr _LVOGetMsg(a6) FromCLI lea TaskBase(pc),a0 move.l d0,(a0) move.l #ProgX_SIZE,d0 move.l #MEMF_PUBLIC!MEMF_CLEAR,d1 jsr _LVOAllocMem(a6) movea.l d0,a5 tst.l d0 beq.w ErAl_Mem move.l a6,Exec_B(a5) move.l #PFLG_OnWorkbench!PFLG_Beep!PFLG_WordInRam,ProgFlags(a5) lea Dos_N(pc),a1 bsr.w OpenLibrary move.l d0,Dos_B(a5) beq.w Exit lea Intuition_N(pc),a1 bsr.w OpenLibrary move.l d0,Intuition_B(a5) beq.w Exit lea Graphics_N(pc),a1 bsr.w OpenLibrary move.l d0,Graphics_B(a5) beq.w Exit lea Commodities_N(pc),a1 bsr.w OpenLibrary move.l d0,Comm_B(a5) beq.w Exit lea GadTools_N(pc),a1 bsr.w OpenLibrary move.l d0,GadTools_B(a5) beq.w Exit move.l Exec_B(a5),a6 jsr _LVOCreateMsgPort(a6) move.l d0,MsgPort1_B(a5) beq.w Exit lea ConIORequest(a5),a1 move.l d0,MN_REPLYPORT(a1) move.b #NT_UNKNOWN,LN_TYPE(a1) move.w #56,MN_LENGTH(a1) lea ConsoleD_N(pc),a0 moveq #-1,d0 ;Flags moveq #0,d1 ;Unit move.l Exec_B(a5),a6 jsr _LVOOpenDevice(a6) tst.l d0 bne.w Exit lea ConIORequest(a5),a1 move.l IO_DEVICE(a1),Console_B(a5) move.l Exec_B(a5),a6 jsr _LVOCreateMsgPort(a6) move.l d0,MsgPort_B(a5) beq.w Exit lea URCBroker(pc),a0 move.l d0,nb_Port(a0) move.l Comm_B(a5),a6 jsr _LVOCxBroker(a6) move.l d0,CxBroker_B(a5) beq.w Exit move.l #CX_FILTER,d0 lea Filter_T(pc),a0 sub.l a1,a1 move.l Comm_B(a5),a6 jsr _LVOCreateCxObj(a6) move.l d0,CxFilter_B(a5) move.l d0,a0 lea IX(pc),a1 jsr _LVOSetFilterIX(a6) move.l CxFilter_B(a5),a1 move.l CxBroker_B(a5),a0 move.l Comm_B(a5),a6 jsr _LVOAttachCxObj(a6) move.l #CX_SEND,d0 move.l MsgPort_B(a5),a0 sub.l a1,a1 move.l Comm_B(a5),a6 jsr _LVOCreateCxObj(a6) move.l d0,a1 move.l CxFilter_B(a5),a0 move.l Comm_B(a5),a6 jsr _LVOAttachCxObj(a6) move.l CxBroker_B(a5),a0 moveq #-1,d0 move.l Comm_B(a5),a6 jsr _LVOActivateCxObj(a6) bsr.w LoadPrefs bsr.w LoadWLibrary tst.l BigOrt_B(a5) beq.w Exit bsr.w OpenWindow bsr.w SetConArray PRLOOP moveq #0,d1 move.l Window_B(a5),d0 beq.b NoSetWindowS move.l d0,a0 moveq #0,d0 ;ustawienie bitu sygnaîowego movea.l wd_UserPort(a0),a0 ;dla portu okienka move.b MP_SIGBIT(a0),d1 bset d1,d0 NoSetWindowS movea.l MsgPort_B(a5),a0 ;ustawienie bitu sygnaîowego move.b MP_SIGBIT(a0),d1 ;dla wîasnego MsgPortu bset d1,d0 movea.l Exec_B(a5),a6 jsr _LVOWait(a6) ;oczekiwanie na komunikat move.l d0,PortBitMask(a5) move.l d0,d7 movea.l MsgPort_B(a5),a0 move.b MP_SIGBIT(a0),d1 btst d1,d7 beq.b NoMsgPortMesage GetCxMsgLoop bsr.w GetCxMsg tst.l d0 beq.b NoMsgPortMesage cmp.b #IECLASS_RAWKEY,Class_C(a5) bne.b NoKeyPress bsr.w ScanKey NoKeyPress cmp.l #CXM_COMMAND,CxMsgType(a5) bne.b GetCxMsgLoop bsr.w CxMsgIDScann bra.b GetCxMsgLoop NoMsgPortMesage move.l PortBitMask(a5),d7 move.l Window_B(a5),d0 beq.w NoWindowMesage move.l d0,a0 movea.l wd_UserPort(a0),a0 move.b MP_SIGBIT(a0),d1 btst d1,d7 beq.w NoWindowMesage move.l Window_B(a5),a0 bsr.w GetWindMsg1 cmp.l #MENUPICK,Class_C(a5) bne.w NoMPick move.w Code_C(a5),d0 CheckCodeLoop move.w d0,Code_C(a5) bsr.w GetItemAddress tst.l d0 beq.w NoMPick move.w Code_C(a5),d0 move.l ProgFlags(a5),d2 cmp.w #(0&$1f)!((6&$3f)<<5)!((NOSUB&$1f)<<11),d0 beq.w Exit cmp.w #(0&$1f)!((0&$3f)<<5)!((NOSUB&$1f)<<11),d0 bne.b NoM0Item1 moveq #0,d0 ;PosFlag move.l d0,a0 ;Window move.l d0,a2 ;PosText lea AboutIT(pc),a1 ;bodytext lea OkIT(pc),a3 ;NegText move.l #GADGETUP,d1 move.l #0,d2 move.l #0,d3 move.l Intuition_B(a5),a6 jsr _LVOAutoRequest(a6) bra.w NoMPick NoM0Item1 cmp.w #(0&$1f)!((4&$3f)<<5)!((NOSUB&$1f)<<11),d0 bne.b NoM0Item4 eor.l #PFLG_Stop,d2 move.l d2,ProgFlags(a5) bsr.w StopOrContinue bra.w NoMPick NoM0Item4 cmp.w #(0&$1f)!((2&$3f)<<5)!((NOSUB&$1f)<<11),d0 bne.b NoM0Item2 lea Mark_Buff(a5),a0 move.l #[EditB_SIZE/4]-1,d0 ClearMarkB clr.l (a0)+ dbf d0,ClearMarkB clr.l Actual_Pos(a5) clr.l Edit_S(a5) bsr.w Print bra.w NoMPick NoM0Item2 cmp.w #(1&$1f)!((0&$3f)<<5)!((0&$1f)<<11),d0 bne.b NoM1Item0Sub0 and.l #~PFLG_OnTop,d2 and.w #CHECKED,d1 beq.b NoChecked100 or.l #PFLG_OnTop,d2 and.l #~(PFLG_OnWorkbench!PFLG_OnTopPublic),d2 NoChecked100 move.l d2,ProgFlags(a5) move.w mi_NextSelect(a2),d0 bra.w CheckCodeLoop NoM1Item0Sub0 cmp.w #(1&$1f)!((0&$3f)<<5)!((1&$1f)<<11),d0 bne.b NoM1Item0Sub1 and.l #~PFLG_OnTopPublic,d2 and.w #CHECKED,d1 beq.b NoChecked101 or.l #PFLG_OnTopPublic,d2 and.l #~(PFLG_OnWorkbench!PFLG_OnTop),d2 NoChecked101 move.l d2,ProgFlags(a5) move.w mi_NextSelect(a2),d0 bra.w CheckCodeLoop NoM1Item0Sub1 cmp.w #(1&$1f)!((0&$3f)<<5)!((2&$1f)<<11),d0 bne.b NoM1Item0Sub2 and.l #~PFLG_OnWorkbench,d2 and.w #CHECKED,d1 beq.b NoChecked102 or.l #PFLG_OnWorkbench,d2 and.l #~(PFLG_OnTop!PFLG_OnTopPublic),d2 NoChecked102 move.l d2,ProgFlags(a5) move.w mi_NextSelect(a2),d0 bra.w CheckCodeLoop NoM1Item0Sub2 cmp.w #(1&$1f)!((2&$3f)<<5)!((NOSUB&$1f)<<11),d0 bne.b NoM1Item2 and.l #~PFLG_Beep,d2 and.w #CHECKED,d1 beq.b NoChecked or.l #PFLG_Beep,d2 NoChecked move.l d2,ProgFlags(a5) move.w mi_NextSelect(a2),d0 bra.w CheckCodeLoop NoM1Item2 cmp.w #(1&$1f)!((5&$3f)<<5)!((NOSUB&$1f)<<11),d0 bne.b NoM1Item5 and.l #~PFLG_NoPLChars,d2 and.w #CHECKED,d1 beq.b NoCheckedPL or.l #PFLG_NoPLChars,d2 NoCheckedPL move.l d2,ProgFlags(a5) bsr.w SetConArray move.w mi_NextSelect(a2),d0 bra.w CheckCodeLoop NoM1Item5 cmp.w #(1&$1f)!((7&$3f)<<5)!((NOSUB&$1f)<<11),d0 bne.b NoMPick bsr.w SavePrefs NoMPick cmp.l #CLOSEWINDOW,Class_C(a5) beq.b Exit NoWindowMesage bra.w PRLOOP ; Exit bsr.w CloseWindow move.l CxBroker_B(a5),d0 beq.b NoCxBroker move.l d0,a0 move.l Comm_B(a5),a6 jsr _LVODeleteCxObjAll(a6) NoCxBroker move.l Exec_B(a5),a6 tst.l Console_B(a5) beq.b NoConsole lea ConIORequest(a5),a1 jsr _LVOCloseDevice(a6) NoConsole GNMLoop move.l MsgPort_B(a5),d0 beq.b NoMsgPO move.l d0,a0 jsr _LVOGetMsg(a6) tst.l d0 beq.b NoMoreMsg move.l d0,a1 jsr _LVOReplyMsg(a6) bra.b GNMLoop NoMoreMsg move.l MsgPort_B(a5),a0 jsr _LVODeleteMsgPort(a6) NoMsgPO GNMLoop1 move.l MsgPort1_B(a5),d0 beq.b NoMsgPO1 move.l d0,a0 jsr _LVOGetMsg(a6) tst.l d0 beq.b NoMoreMsg1 move.l d0,a1 jsr _LVOReplyMsg(a6) bra.b GNMLoop1 NoMoreMsg1 move.l MsgPort1_B(a5),a0 jsr _LVODeleteMsgPort(a6) NoMsgPO1 move.l BigOrt_B(a5),d0 beq.b NoLoaded move.l d0,a1 move.l BigOrt_S(A5),d0 move.l Exec_B(a5),a6 jsr _LVOFreeMem(a6) NoLoaded move.l Comm_B(a5),a1 bsr.w CloseLibrary move.l Intuition_B(a5),a1 bsr.w CloseLibrary move.l Dos_B(a5),a1 bsr.w CloseLibrary move.l Graphics_B(a5),a1 bsr.w CloseLibrary move.l GadTools_B(a5),a1 bsr.w CloseLibrary movea.l a5,a1 move.l #ProgX_SIZE,d0 movea.l Exec_B(a5),a6 jsr _LVOFreeMem(a6) ErAl_Mem move.l TaskBase(pc),d0 beq.s FromCLI1 jsr _LVOForbid(a6) movea.l TaskBase(pc),a1 jsr _LVOReplyMsg(a6) FromCLI1 movem.l (sp)+,d1-d7/a0-a6 moveq #0,d0 rts ; GetItemAddress move.w d0,d1 move.l Menu_B(a5),d0 beq.b GINoM move.l d0,a0 move.w d1,d0 move.l Intuition_B(a5),a6 jsr _LVOItemAddress(a6) move.l d0,a2 move.w mi_Flags(a2),d1 GINoM rts ; StopOrContinue move.w #(0&$1f)!((4&$3f)<<5)!((NOSUB&$1f)<<11),d0 bsr.b GetItemAddress tst.l d0 beq.b NoSetSOCText lea Continue_T(pc),a1 move.l ProgFlags(a5),d2 and.l #PFLG_Stop,d2 bne.b Stop lea Stop_T(pc),a1 Stop move.l mi_ItemFill(a2),a2 lea it_IText(a2),a2 move.l a1,(a2) NoSetSOCText moveq #0,d0 move.l ProgFlags(a5),d2 and.l #PFLG_Stop,d2 bne.b StopBr moveq #-1,d0 StopBr move.l CxBroker_B(a5),a0 move.l Comm_B(a5),a6 jsr _LVOActivateCxObj(a6) rts CxMsgIDScann move.l CxMsgID(a5),d0 cmp.l #CXCMD_KILL,d0 bne.b NoKill addq.l #4,sp bra.w Exit NoKill cmp.l #CXCMD_UNIQUE,d0 bne.b NoUnique bsr.w OpenWindow rts NoUnique cmp.l #CXCMD_APPEAR,d0 bne.b NoAppear bsr.w OpenWindow rts NoAppear cmp.l #CXCMD_DISAPPEAR,d0 bne.b NoDisappear bsr.w CloseWindow rts NoDisappear cmp.l #CXCMD_DISABLE,d0 bne.b NoDisable or.l #PFLG_Stop,ProgFlags(a5) bsr.w StopOrContinue rts NoDisable cmp.l #CXCMD_ENABLE,d0 bne.b NoEnable and.l #~PFLG_Stop,ProgFlags(a5) bsr.w StopOrContinue NoEnable rts ; ScanKey move.w Code_C(a5),d2 move.w Qualifier_C(a5),d3 lea BadCodes(pc),a0 SBCLoop move.w (a0)+,d0 beq.b NoFindBadCodes cmp.w d0,d2 bne.b SBCLoop bra.w ScanKeyExit NoFindBadCodes lea ConChars(a5),a0 lea Edit_Buff(a5),a1 lea Mark_Buff(a5),a4 lea Print_Buff(a5),a6 move.l Actual_Pos(a5),d0 move.l Edit_S(a5),d1 moveq #0,d4 cmp.w #R_Del,d2 bne.b NoDelPush and.w #IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT!IEQUALIFIER_CONTROL,d3 beq.b DelPush move.l d0,d1 bra.w SetActual NoDelPush cmp.w #R_BckSpace,d2 bne.b NoBackSpacePush and.w #IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT!IEQUALIFIER_CONTROL,d3 beq.b BackSpacePush move.l d0,d2 moveq #0,d3 CopyLoop cmp.w d1,d2 bcc.b CopyDone move.b (a1,d2.w),(a1,d3.w) move.b (a4,d2.w),(a4,d3.w) addq.l #1,d2 addq.l #1,d3 bra.b CopyLoop CopyDone moveq #0,d0 move.l d3,d1 bra.w SetActual BackSpacePush subq.l #1,d0 bmi.w ScanKeyExit DelPush subq.l #1,d1 cmp.l d0,d1 bcs.w ScanKeyExit move.l d0,d2 MoveChars move.b 1(a1,d2.w),(a1,d2.w) move.b 1(a4,d2.w),(a4,d2.w) addq.l #1,d2 cmp.l d1,d2 bcs.b MoveChars bra.w SetActual NoBackSpacePush cmp.w #R_LArrow,d2 bne.b NoLArrowPush and.w #IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT!IEQUALIFIER_CONTROL,d3 beq.b LArrowPush moveq #0,d0 bra.w SetActual1 LArrowPush subq.l #1,d0 bmi.w ScanKeyExit bra.w SetActual1 NoLArrowPush cmp.w #R_RArrow,d2 bne.b NoRArrowPush and.w #IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT!IEQUALIFIER_CONTROL,d3 beq.b RArrowPush move.l d1,d0 bra.b SetActual1 RArrowPush addq.l #1,d0 cmp.l d1,d0 bhi.w ScanKeyExit bra.b SetActual1 NoRArrowPush cmp.w #R_Enter,d2 bne.b NoEnterPush move.l a4,a0 move.l #[EditB_SIZE/4]-1,d0 ClearMarkBuff clr.l (a0)+ dbf d0,ClearMarkBuff clr.l Actual_Pos(a5) clr.l Edit_S(a5) bra.w ScanKeyExit NoEnterPush cmp.l #EditB_SIZE-1,d1 bne.b NoOnTheEnd tst.l d0 beq.b SetActual1 moveq #-1,d2 CopyNearLoop add.l #1,d2 cmp.l d0,d2 beq.b NoCopyNear move.b 1(a4,d2.w),(a4,d2.w) move.b 1(a1,d2.w),(a1,d2.w) bra.b CopyNearLoop NoCopyNear subq.l #1,d0 subq.l #1,d1 bra.b OnTheEnd NoOnTheEnd cmp.l d0,d1 beq.b OnTheEnd move.l d1,d2 CopyStringFar move.b (a4,d2.w),1(a4,d2.w) move.b (a1,d2.w),1(a1,d2.w) subq.l #1,d2 cmp.l d0,d2 bge.b CopyStringFar OnTheEnd move.b (a0),(a1,d0.w) clr.b (a4,d1.w) addq #1,d0 addq #1,d1 SetActual moveq #1,d4 SetActual1 move.l d0,Actual_Pos(a5) move.l d1,Edit_S(a5) tst.l d4 beq.w NoCheck subq.l #1,d0 bmi.w NoCheck lea Convert(a5),a4 tst.w WMark(a5) beq.b NoBeep move.b (a0),d4 tst.b (a4,d4.w) bne.b NoBeep move.l ProgFlags(a5),d0 and.l #PFLG_Beep,d0 beq.w NoCheck sub.l a0,a0 move.l Intuition_B(a5),a6 jsr _LVODisplayBeep(a6) clr.w WMark(a5) move.l Window_B(a5),a0 jsr _LVOWindowToFront(a6) move.l ProgFlags(a5),d0 and.l #PFLG_OnTop!PFLG_OnTopPublic,d0 beq.w NoCheck move.l ib_FirstScreen(a6),d0 cmp.l Screen_B(a5),d0 beq.w NoCheck ChangeScreen bsr.w CloseWindow bsr.w OpenWindow bra.w NoCheck NoBeep moveq #0,d2 FindEndOfW move.b (a1,d0.w),d2 move.b (a4,d2.w),d2 beq.b Check addq.l #1,d0 cmp.l d1,d0 bcs.b FindEndOfW Check move.w d0,d1 CheckLoop subq.w #1,d0 bmi.b FindS move.b (a1,d0.w),d2 move.b (a4,d2.w),d2 bne.b CheckLoop FindS move.l a6,a0 move.l a0,a2 move.w d1,d4 sub.w d0,d4 cmp.w #1,d4 beq.w NoCheck move.w d0,SMark(a5) move.w d1,EMark(a5) move.w #$0002,WMark(a5) cmp.w #MaxChars-1,d4 bge.w DataNotFund moveq #0,d4 CopyFWLoop addq.w #1,d0 move.b (a1,d0.w),d4 move.b (a4,d4.w),(a0)+ cmp.w d1,d0 bcs.b CopyFWLoop clr.b -1(a0) move.l ProgFlags(a5),d5 and.l #PFLG_NoPLChars,d5 moveq #0,d4 move.l #$dfdfdfdf,d3 moveq #3,d2 SetHLoop lsl.l #8,d4 move.b (a2)+,d4 beq.s ModifyMask tst.l d5 bne.b ModifyMa dbf d2,SetHLoop bra.s HeaderCompleted ModifyMa subq.l #1,d2 lsl.l #8,d4 ModifyMask addq.l #1,d2 lsl.l #3,d2 lsl.l d2,d3 subq.l #8,d2 lsl.l d2,d4 HeaderCompleted and.l d3,d4 moveq #0,d6 move.l BigOrt_B(a5),a0 move.l a0,a2 add.l #12,a0 FindBeginLoop move.l (a0)+,d2 beq.w DataNotFund tst.l d5 beq.b NoConw move.b d2,d6 move.b (a4,d6.w),d2 rol.l #8,d2 move.b d2,d6 move.b (a4,d6.w),d2 rol.l #8,d2 move.b d2,d6 move.b (a4,d6.w),d2 rol.l #8,d2 move.b d2,d6 move.b (a4,d6.w),d2 rol.l #8,d2 NoConw addq.l #4,a0 and.l d3,d2 cmp.l d2,d4 bne.s FindBeginLoop subq.l #4,a0 move.l (a0),d1 FindEndLoop addq.l #4,a0 move.l (a0)+,d2 beq.s EndFounded tst.l d5 beq.b NoConw1 move.b d2,d6 move.b (a4,d6.w),d2 rol.l #8,d2 move.b d2,d6 move.b (a4,d6.w),d2 rol.l #8,d2 move.b d2,d6 move.b (a4,d6.w),d2 rol.l #8,d2 move.b d2,d6 move.b (a4,d6.w),d2 rol.l #8,d2 NoConw1 and.l d3,d2 cmp.l d2,d4 beq.s FindEndLoop EndFounded move.l (a0),d0 add.l (a2),a2 move.l a2,a1 add.l d1,a1 add.l d0,a2 move.l a1,a3 moveq #0,d1 CmpWithNext move.l a6,a0 CmpCharsLoop move.b (a0)+,d0 move.b (a1)+,d1 move.b (a4,d1.w),d1 cmp.b d0,d1 bne.b NoTheSame tst.b d0 bne.b CmpCharsLoop bra.b WordFound NoTheSame move.l a3,a1 FindBeginOfStr cmp.l a2,a1 bcc.b DataNotFund tst.b (a1)+ bne.b FindBeginOfStr move.l a1,a3 bra.b CmpWithNext WordFound clr.w WMark(a5) DataNotFund move.w SMark(a5),d0 move.w EMark(a5),d1 subq.l #1,d1 move.w WMark(a5),d2 lea Mark_Buff(a5),a1 SetMarkLoop addq.w #1,d0 move.b d2,(a1,d0.w) cmp.w d1,d0 bcs.b SetMarkLoop NoCheck bsr.w Print ScanKeyExit move.l #0,ConChars(a5) rts ; OpenWindow move.l Intuition_B(a5),a6 move.l Window_B(a5),d0 bne.w WindowIsOpened move.l ProgFlags(a5),d0 and.l #PFLG_OnTop!PFLG_OnTopPublic,d0 beq.b OnWorkbench and.l #PFLG_OnTop,d0 beq.b OnlyTopPublic move.l a6,-(sp) move.l Exec_B(a5),a6 jsr _LVOForbid(a6) move.l (sp)+,a6 move.l ib_FirstScreen(a6),d0 bne.b LockScreenOk OnlyTopPublic move.l ib_FirstScreen(a6),a0 move.l sc_DefaultTitle(a0),a0 jsr _LVOLockPubScreen(a6) tst.l d0 bne.b LockScreenOk OnWorkbench sub.l a0,a0 jsr _LVOLockPubScreen(a6) LockScreenOk move.l d0,-(sp) move.l d0,Screen_B(a5) beq.b NotFoundScreen lea WT_PScreen(pc),a0 move.l d0,(a0) move.l d0,a0 moveq #0,d0 move.b sc_BarHeight(a0),d0 add.w #1,d0 lea sc_RastPort(a0),a1 move.l rp_Font(a1),a1 add.w tf_YSize(a1),d0 move.w d0,YOffset(a5) add.l #Y.pos+8,d0 moveq #0,d1 move.w tf_XSize(a1),d1 mulu #MaxChars,d1 add.l #[2*X.pos],d1 lea WT_Height(pc),a1 move.l d0,(a1) lea WT_Width(pc),a1 move.l d1,(a1) NotFoundScreen sub.l a0,a0 lea WindowTag_D(pc),a1 jsr _LVOOpenWindowTagList(a6) move.l d0,Window_B(a5) beq.b OpenW_E move.l Window_B(a5),a1 movea.l wd_RPort(a1),a1 move.l Graphics_B(a5),a6 moveq #1,d0 jsr _LVOSetAPen(a6) bsr.b CreateMenu OpenW_E move.l (sp)+,d1 move.l ProgFlags(a5),d0 and.l #PFLG_OnTop,d0 beq.b NoOnTop move.l a6,-(sp) move.l Exec_B(a5),a6 jsr _LVOPermit(a6) move.l (sp)+,a6 bra.b NoLock NoOnTop sub.l a0,a0 move.l d1,a1 beq.b NoLock jsr _LVOUnlockPubScreen(a6) NoLock move.l Window_B(a5),d0 WindowIsOpened move.l d0,a0 jsr _LVOWindowToFront(a6) rts ; CloseWindow bsr.b DestroyMenu move.l Window_B(a5),d0 beq.b WindowIsClosed move.l d0,a0 move.l Intuition_B(a5),a6 jsr _LVOCloseWindow(a6) clr.l Window_B(a5) WindowIsClosed rts ; CreateMenu bsr.w SetPrefs move.l Screen_B(a5),d0 beq.b GetVI_E move.l d0,a0 sub.l a1,a1 move.l GadTools_B(a5),a6 jsr _LVOGetVisualInfoA(a6) move.l d0,VisualI_B(a5) beq.b GetVI_E lea Menu_D(pc),a0 sub.l a1,a1 jsr _LVOCreateMenusA(a6) move.l d0,Menu_B(a5) beq.b CreaM_E move.l d0,a0 move.l VisualI_B(a5),a1 lea LayoutTag(pc),a2 jsr _LVOLayoutMenusA(a6) move.l Window_B(a5),a0 move.l Menu_B(a5),a1 move.l Intuition_B(a5),a6 jsr _LVOSetMenuStrip(a6) GetVI_E CreaM_E rts ; DestroyMenu move.l Window_B(a5),a0 move.l Intuition_B(a5),a6 jsr _LVOClearMenuStrip(a6) move.l Menu_B(a5),d0 beq.b NoMenu move.l d0,a0 clr.l Menu_B(a5) move.l GadTools_B(a5),a6 jsr _LVOFreeMenus(a6) NoMenu move.l VisualI_B(a5),d0 beq.b NoVisualI move.l d0,a0 clr.l VisualI_B(a5) move.l GadTools_B(a5),a6 jsr _LVOFreeVisualInfo(a6) NoVisualI rts ; GetWindMsg movem.l a0,-(sp) movea.l wd_UserPort(a0),a0 movea.l Exec_B(a5),a6 jsr _LVOWaitPort(a6) movem.l (sp)+,a0 GetWindMsg1 movea.l wd_UserPort(a0),a0 movea.l Exec_B(a5),a6 jsr _LVOGetMsg(a6) tst.l d0 beq.s NoWindMsg movea.l d0,a1 move.l im_Class(a1),Class_C(a5) move.w im_Code(a1),Code_C(a5) move.l im_IAddress(a1),IAddress_C(a5) jsr _LVOReplyMsg(a6) NoWindMsg rts ; GetCxMsg clr.b Class_C(a5) move.l MsgPort_B(a5),a0 movea.l Exec_B(a5),a6 jsr _LVOGetMsg(a6) tst.l d0 beq.s NoCxMsg move.l d0,-(sp) move.l d0,a0 move.l Comm_B(a5),a6 jsr _LVOCxMsgID(a6) move.l d0,CxMsgID(a5) move.l (sp),a0 jsr _LVOCxMsgType(a6) move.l d0,CxMsgType(a5) cmp.l #CXM_IEVENT,d0 bne.b NoIEvent move.l (sp),a0 jsr _LVOCxMsgData(a6) move.l d0,a0 move.w ie_Code(a0),d0 btst #IECODEB_UP_PREFIX,d0 bne.b NoIEvent move.b ie_Class(a0),Class_C(a5) move.w d0,Code_C(a5) move.w ie_Qualifier(a0),Qualifier_C(a5) lea ConChars(a5),a1 sub.l a2,a2 ;set zero for default keymap move.l #ConChars_SIZE,d1 move.l Console_B(a5),a6 jsr _LVORawKeyConvert(a6) move.l d0,ConResult(a5) NoIEvent move.l (sp)+,a1 movea.l Exec_B(a5),a6 jsr _LVOReplyMsg(a6) moveq #-1,d0 NoCxMsg rts ; Print move.l Window_B(a5),d0 beq.b NoPrint move.l d0,a1 lea Edit_Buff(a5),a0 lea Mark_Buff(a5),a2 move.l a0,a3 move.l a0,a4 add.l Edit_S(a5),a3 move.l Actual_Pos(a5),d0 add.l d0,a4 sub.w #MaxChars-1,d0 bcs.b PosInWindow add.l d0,a0 add.l d0,a2 PosInWindow movea.l wd_RPort(a1),a1 move.l Graphics_B(a5),a6 moveq #X.pos,d0 moveq #Y.pos,d1 add.w YOffset(a5),d1 movem.l a4/a3/a2/a1/a0/d7/d0,-(sp) jsr _LVOMove(a6) move.l #MaxChars-1,(sp) PrintLoop movem.l (sp),a4/a3/a2/a1/a0/d7/d1 moveq #3,d0 cmp.l a4,a0 beq.b CursorPos move.b (a2),d0 CursorPos addq.l #1,16(sp) jsr _LVOSetBPen(a6) movem.l (sp),a4/a3/a2/a1/a0/d7/d1 cmp.l a3,a0 bcs.b Ok lea WhiteChar(pc),a0 Ok moveq #1,d0 jsr _LVOText(a6) addq.l #1,8(sp) sub.l #1,(sp) bcc.b PrintLoop movem.l (sp)+,a4/a3/a2/a1/a0/d7/d1 NoPrint rts ; LoadWLibrary lea BigOrt(pc),a1 move.l a1,d1 move.l #MODE_OLDFILE,d2 move.l Dos_B(a5),a6 jsr _LVOOpen(a6) move.l d0,TmpFH_B(a5) beq.b OpenF_E move.l d0,d1 moveq #0,d2 moveq #OFFSET_END,d3 jsr _LVOSeek(a6) tst.l d0 bmi.b SeekF_E move.l TmpFH_B(a5),d1 moveq #0,d2 moveq #OFFSET_BEGINNING,d3 jsr _LVOSeek(a6) move.l d0,BigOrt_S(a5) bmi.b SeekF_E move.l #MEMF_PUBLIC,d1 move.l Exec_B(a5),a6 jsr _LVOAllocMem(a6) move.l d0,BigOrt_B(a5) beq.b AvailM_E move.l d0,d2 move.l BigOrt_S(a5),d3 move.l TmpFH_B(a5),d1 move.l Dos_B(a5),a6 jsr _LVORead(a6) AvailM_E SeekF_E move.l TmpFH_B(a5),d1 movea.l Dos_B(a5),a6 jsr _LVOClose(a6) OpenF_E rts ; SavePrefs lea PrefsFile(pc),a1 move.l a1,d1 move.l #MODE_NEWFILE,d2 move.l Dos_B(a5),a6 jsr _LVOOpen(a6) move.l d0,TmpFH_B(a5) beq.b OpenFW_E lea ProgFlags(a5),a2 move.l a2,d2 move.l #4,d3 move.l TmpFH_B(a5),d1 move.l Dos_B(a5),a6 jsr _LVOWrite(a6) move.l TmpFH_B(a5),d1 movea.l Dos_B(a5),a6 jsr _LVOClose(a6) OpenFW_E rts ; LoadPrefs lea PrefsFile(pc),a1 move.l a1,d1 move.l #MODE_OLDFILE,d2 move.l Dos_B(a5),a6 jsr _LVOOpen(a6) move.l d0,TmpFH_B(a5) beq.b OpenFR_E lea ProgFlags(a5),a2 move.l a2,d2 move.l #4,d3 move.l TmpFH_B(a5),d1 move.l Dos_B(a5),a6 jsr _LVORead(a6) move.l TmpFH_B(a5),d1 movea.l Dos_B(a5),a6 jsr _LVOClose(a6) and.l #~PFLG_Stop,ProgFlags(a5) OpenFR_E rts ; SetPrefs move.l ProgFlags(a5),d0 lea VoidArray(pc),a0 SetMFlagsLoop move.l (a0)+,d1 beq.b SetPrefsJmp move.l d1,a1 move.w gnm_Flags(a1),d1 and.w #~CHECKED,d1 btst.l #0,d0 beq.b NoCHeckedMark or.w #CHECKED,d1 NoCHeckedMark move.w d1,gnm_Flags(a1) lsr.l #1,d0 bra.b SetMFlagsLoop SetPrefsJmp lea Stop_T(pc),a0 lea StopMPtr(pc),a1 btst.l #0,d0 beq.b StopTxtSet lea Continue_T(pc),a0 StopTxtSet move.l a0,gnm_Label(a1) rts ; OpenLibrary moveq #36,d0 move.l Exec_B(a5),a6 jmp _LVOOpenLibrary(a6) ; CloseLibrary move.l a1,d0 beq.b NoLibraryO move.l Exec_B(a5),a6 jsr _LVOCloseLibrary(a6) NoLibraryO rts ; SetConArray lea Convert(a5),a0 move.w #255,d0 SetConvert clr.b (a0,d0.w) dbf d0,SetConvert moveq #0,d0 lea PLDatas(pc),a1 SetUniques move.b (a1)+,d0 move.w d0,d1 and.b #$df,d1 move.b d1,(a0,d0.w) move.b d1,(a0,d1.w) tst.b d0 bne.b SetUniques move.l ProgFlags(a5),d0 and.l #PFLG_NoPLChars,d0 beq.b PLChars lea PLConvert(pc),a1 moveq #0,d0 SetPLChars move.b (a1)+,d0 move.b (a1)+,(a0,d0.w) bne.b SetPLChars PLChars rts PLDatas dc.b "qwertyuiopasdfghjklzxcvbnmëóâôîûúêï",0 PLConvert dc.b "ÂAÊCËEÎLÏNÓOÔSÛZÚZ","âAêCëEîLïNóOôSûZúZ",0,0 TaskBase dc.l 0 WindowTag_D dc.l WA_Left,0 dc.l WA_Top,0 dc.l WA_Width WT_Width dc.l 320 dc.l WA_Height WT_Height dc.l 200 dc.l WA_CustomScreen WT_PScreen dc.l 0 dc.l WA_Title,WindowT dc.l WA_CloseGadget,TRUE dc.l WA_DragBar,TRUE dc.l WA_DepthGadget,TRUE dc.l WA_GimmeZeroZero,FALSE dc.l WA_NewLookMenus,TRUE dc.l WA_IDCMP,IDCMP_CLOSEWINDOW!IDCMP_MENUPICK dc.l TAG_DONE LayoutTag dc.l GTMN_NewLookMenus,TRUE dc.l TAG_DONE URCBroker dc.b NB_VERSION dc.b 0 dc.l CName dc.l CTitle dc.l CDescr dc.w NBU_UNIQUE!NBU_NOTIFY dc.w COF_SHOW_HIDE dc.b 0 dc.b 0 dc.l 0 dc.l 0 IX dc.b IX_VERSION dc.b IECLASS_RAWKEY dc.w $0 dc.w $0 dc.w $0 dc.w IEQUALIFIER_LCOMMAND!IEQUALIFIER_RCOMMAND!IEQUALIFIER_INTERRUPT!IEQUALIFIER_MULTIBROADCAST!IEQUALIFIER_MIDBUTTON!IEQUALIFIER_RBUTTON!IEQUALIFIER_LEFTBUTTON dc.w IXSYM_SHIFT!IXSYM_ALT!IXSYM_CAPS BadCodes dc.w R_CapsLock,R_Ctrl,R_LAlt,R_RAlt,R_LShift,R_RShift,R_UArrow,R_DArrow dc.w R_F1,R_F2,R_F3,R_F4,R_F5,R_F6,R_F7,R_F8,R_F9,R_F10,0 VoidArray dc.l TopMPtr dc.l WorkbenchMPtr dc.l ScreenBMPtr dc.l WordMPtr dc.l PLCharMPtr dc.l TopPublicMPtr dc.l 0 Menu_D dc.b NM_TITLE,0 dc.l Project_T,0 dc.w 0 dc.l 0,0 dc.b NM_ITEM,0 dc.l About_T,0 dc.w 0 dc.l 0,0 dc.b NM_ITEM,0 dc.l NM_BARLABEL,0 dc.w 0 dc.l 0,0 dc.b NM_ITEM,0 dc.l Clear_T,0 dc.w 0 dc.l 0,0 dc.b NM_ITEM,0 dc.l NM_BARLABEL,0 dc.w 0 dc.l 0,0 StopMPtr dc.b NM_ITEM,0 dc.l Stop_T,0 dc.w 0 dc.l 0,0 dc.b NM_ITEM,0 dc.l NM_BARLABEL,0 dc.w 0 dc.l 0,0 dc.b NM_ITEM,0 dc.l Quit_T,0 dc.w 0 dc.l 0,0 dc.b NM_TITLE,0 dc.l Prefs_T,0 dc.w 0 dc.l 0,0 dc.b NM_ITEM,0 dc.l Window_T,0 dc.w 0 dc.l 0,0 TopMPtr dc.b NM_SUB,0 dc.l Top_T,0 dc.w CHECKIT dc.l %110,0 TopPublicMPtr dc.b NM_SUB,0 dc.l TopP_T,0 dc.w CHECKIT dc.l %101,0 WorkbenchMPtr dc.b NM_SUB,0 dc.l Workbench_T,0 dc.w CHECKIT!CHECKED dc.l %011,0 dc.b NM_ITEM,0 dc.l NM_BARLABEL,0 dc.w 0 dc.l 0,0 ScreenBMPtr dc.b NM_ITEM,0 dc.l ScreenB_T,0 dc.w CHECKIT!CHECKED dc.l 0,0 dc.b NM_ITEM,0 dc.l NM_BARLABEL,0 dc.w 0 dc.l 0,0 WordMPtr dc.b NM_ITEM,0 dc.l Word_T,0 dc.w CHECKIT!CHECKED!NM_ITEMDISABLED dc.l 0,0 PLCharMPtr dc.b NM_ITEM,0 dc.l PLChar_T,0 dc.w CHECKIT dc.l 0,0 dc.b NM_ITEM,0 dc.l NM_BARLABEL,0 dc.w 0 dc.l 0,0 dc.b NM_ITEM,0 dc.l Save_T,0 dc.w 0 dc.l 0,0 dc.b NM_END,0 dc.l 0,0 dc.w 0 dc.l 0,0 AboutIT dc.b 01,00,RP_JAM2,00 dc.w 0,0 dc.l 0,AboutM_T,0 OkIT dc.b 01,00,RP_JAM2,00 dc.w 0,0 dc.l 0,Ok_T,0 AboutM_T dc.b "Checker V 0.5 (17-XI-2000)",$0a,$0a dc.b "napisaî",$0a dc.b "Jarosîaw Paruzel",$0a,$0a,$0a dc.b "GIFTWARE PRODUCT",$0a dc.b "ALL RIGHTS RESERVED",$0a,$0a dc.b "e-mail: yarex@kki.net.pl" dc.b 0 Ok_T dc.b "Ok",0 Project_T dc.b "Projekt",0 About_T dc.b "Informacje...",0 Clear_T dc.b "Wyczyôê bufor",0 Stop_T dc.b "Zatrzym dziaîanie",0 Quit_T dc.b "Wyjôcie",0 Continue_T dc.b "Wznów dziaîanie ",0 Prefs_T dc.b "Preferencje",0 Window_T dc.b "Okno programu na ekranie",0 TopP_T dc.b "Pierwszym publicznym",0 Top_T dc.b "Pierwszym",0 Workbench_T dc.b "Workbencha-a",0 ScreenB_T dc.b "Migotanie gdy bîâd",0 Word_T dc.b "Wyrazy w ramie",0 PLChar_T dc.b "Ignoruj ogonki",0 Save_T dc.b "Zapisz",0 CDescr WindowT dc.b "Checker V 0.5 by J.Paruzel",0 CName dc.b "Checker",0 CTitle dc.b "Plspell checker",0 Filter_T dc.b 'rawkey alt a',0 Dos_N dc.b 'dos.library',0 Intuition_N dc.b 'intuition.library',0 Commodities_N dc.b 'commodities.library',0 Graphics_N dc.b 'graphics.library',0 ConsoleD_N dc.b 'console.device',0 GadTools_N dc.b "gadtools.library",0 BigOrt dc.b 'progdir:BigOrtLib',0 PrefsFile dc.b 'envarc:Keycheck.prefs',0 WhiteChar dc.b ' '