home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 300-399 / ff321.lzh / DezHexBin / dhb.s < prev    next >
Text File  |  1990-02-27  |  29KB  |  1,495 lines

  1.  
  2. ;**********************************************************************
  3. ;*                                      *
  4. ;*              DezHexBin - PUBLIC DOMAIN               *
  5. ;*                                      *
  6. ;*                 Version 1.1                  *
  7. ;*                                      *
  8. ;*            (C) Michael Djavidan 7.1.1990                     *
  9. ;*           St.Kolomann 7, 8059 Wörth, West Germany              *
  10. ;*              Phone: 08123/1288                  *
  11. ;*                                      *
  12. ;*                                      *
  13. ;*               Assembler: ASM68K (-CC)                        *
  14. ;*                                      *
  15. ;*                                      *
  16. ;**********************************************************************
  17.  
  18.  
  19.  
  20. ;***** LIBRARY BASE OFFSETS *******************************************
  21.  
  22. ;***** Exec Library Base Offsets
  23.  
  24. OPENLIBRARY:    equ -552
  25. CLOSELIBRARY:    equ -414
  26. FORBID:     equ -30-102
  27. FINDTASK:    equ -294
  28. WAITPORT:    equ -384
  29. GETMSG:     equ -372
  30. REPLYMSG:    equ -378
  31.  
  32. ;***** DOS Library Base Offsets
  33.  
  34. Write:        equ -48
  35. Output:     equ -60
  36.  
  37. ;***** Intuition Library Offsets
  38.  
  39. OpenWindow:    equ -204
  40. CloseWindow:    equ -72
  41. RefreshGadgets: equ -222
  42. SetWindowTitles:    equ -276
  43. SetMenuStrip:    equ -264
  44. ModifyIDCMP:    equ -150
  45. DisplayBeep:    equ -96
  46.  
  47. ;***** Graphics Library Base Offsets
  48.  
  49. SETAPEN:    equ -342
  50. SETBPEN:    equ -348
  51. MOVE:        equ -240
  52. TEXT:        equ -60
  53.  
  54.  
  55. ;***** Sonstige Deklarationen ****************************************
  56.  
  57. Sysbase:    equ 4
  58.  
  59. rp_FgPen:    equ $19     ;Rastport
  60. rp_LinePtrn:    equ $22
  61.  
  62. ;***** INTUITION-Message *****
  63.  
  64. im_Class:    equ $14
  65. im_Code:    equ $18
  66. im_IAddress:    equ $1C
  67.  
  68. ;***** Zeichenmodi *****
  69.  
  70. RP_JAM1:    equ 0
  71. RP_JAM2:    equ 1
  72. RP_COMPLEMENT:    equ 2
  73. RP_INVERSVID:    equ 4
  74.  
  75. ;***** WINDOWS *****
  76.  
  77. WINDOWSIZING:        equ $1
  78. WINDOWDRAG:        equ $2
  79. WINDOWDEPTH:        equ $4
  80. WINDOWCLOSE:        equ $8
  81. BORDERLESS:        equ $800
  82. ACTIVATE:        equ $1000
  83. SIMPLE_REFRESH:     equ $40
  84.  
  85. ;IDCMP-Flags:
  86.  
  87. MOUSEBUTTONS:        equ $8
  88. MENUPICK:        equ $100
  89. IDCMPCLOSEWINDOW:    equ $200
  90. NEWSIZE:        equ $2
  91. MOUSEMOVE:        equ $10
  92. INACTIVEWINDOW:     equ $80000
  93. ACTIVEWINDOW:        equ $40000
  94.  
  95. WD_RPORT:        equ $32
  96. WD_USERPORT:        equ 86        ;Für WAIT()
  97. MP_SIGBIT:        equ 15
  98.  
  99. ;***** Gadgets *****
  100.  
  101. GADGHCOMP:    equ 0
  102. GADGHBOX:    equ 1
  103. GADGHIMAGE:    equ 2
  104. GADGHNONE:    equ 3
  105.  
  106. RELVERIFY:    equ $1
  107. GADGDISABLED:    equ $0100
  108. GADGIMMEDIATE:    equ $2
  109. SELECTED:    equ $80
  110. FOLLOWMOUSE:    equ $8
  111. TOGGLESELECT:    equ $100
  112. GADGETUP:    equ $40     ;Int-Message (im_Class)
  113. GADGETDOWN:    equ $20
  114.  
  115. BOOLGADGET:    equ 1
  116. GADGET0002:    equ 2
  117. PROPGADGET:    equ 3
  118. STRGADGET:    equ 4
  119.  
  120. gg_GadgetID:    equ $26
  121.  
  122.  
  123. ;*****    Makro-Definitionen  ******************************************
  124.  
  125. CallInt: macro
  126.    move.l IntBase,a6
  127.    jsr      \1(a6)
  128.    endm
  129.  
  130. CallExec: macro
  131.    move.l SysBase,a6
  132.    jsr      \1(a6)
  133.    endm
  134.  
  135. CallGfx: macro
  136.    move.l GfxBase,a6
  137.    jsr      \1(a6)
  138.    endm
  139.  
  140. CallDos: macro
  141.    move.l DosBase,a6
  142.    jsr      \1(a6)
  143.    endm
  144.  
  145. * Makro zum Öffnen einer Library
  146. OpenLib: macro
  147.    move.l #\1,a1
  148.    moveq  #0,d0
  149.    move.l Sysbase,a6
  150.    jsr      OpenLibrary(a6)
  151.    tst.l  d0
  152.    endm
  153.  
  154. CloseLib: macro
  155.    move.l \1,a1
  156.    move.l SysBase,a6
  157.    jsr      CloseLibrary(a6)
  158.    endm
  159.  
  160. ;Aufruf PUTS ^Text
  161. PUTS:    macro
  162.     lea \1,a0
  163.     bsr PUTS_
  164.     endm
  165.  
  166. * Aufruf: Window,x,y,^String(abgeschlossen mit \0)
  167. DRAWTEXT:  macro
  168.     move.l \1,a1
  169.     lea \4,a0
  170.     move.l #\2,d0
  171.     move.l #\3,d1
  172.     bsr _DRAWTEXT
  173.     endm
  174.  
  175. * Aufruf: Window,FarbNr.
  176. PenA: macro
  177.    movem.l d0/a1/a6,-(sp)
  178.    move.l \1,a1
  179.    move.l wd_RPort(a1),a1
  180.    move.l #\2,d0
  181.    move.l GfxBase,a6
  182.    jsr      SetAPen(a6)
  183.    movem.l (sp)+,d0/a1/a6
  184.    endm
  185. PenB: macro
  186.    movem.l d0/a1/a6,-(sp)
  187.    move.l \1,a1
  188.    move.l wd_RPort(a1),a1
  189.    move.l #\2,d0
  190.    move.l GfxBase,a6
  191.    jsr      SetBPen(a6)
  192.    movem.l (sp)+,d0/a1/a6
  193.    endm
  194.  
  195. * AUFRUF: Window,^WindowText,^ScreenText
  196. WINDOWTITLE: macro
  197.     movem.l d0/a0/a1/a2/a6,-(sp)
  198.     move.l \1,a0
  199.     lea \2,a1
  200.     lea \3,a2
  201.     move.l IntBase,a6
  202.     jsr SetWindowTitles(a6)
  203.     movem.l (sp)+,d0/a0/a1/a2/a6
  204.     endm
  205.  
  206. ;*********************************************************************
  207. ;*     CodeTeil                              *
  208. ;*********************************************************************
  209.  
  210.  
  211. ;***** STARTUP-CODE **************************************************
  212.  
  213.     movem.l d0/a0,-(sp)     ;Parameter retten
  214.     clr.l WorkbenchMsg
  215.  
  216. ;Test, von wo aufgerufen wurde
  217.     sub.l a1,a1
  218.     CALLEXEC FindTask
  219.     move.l d0,a4
  220.     tst.l $ac(a4)          ;Workbench ?
  221.     beq.s Workbench
  222.  
  223. ;Start aus dem CLI
  224.     movem.l (sp)+,d0/a0
  225.     bra.s Start
  226.  
  227. ;Start von Workbench
  228. Workbench:
  229.     lea $5c(a4),a0
  230.     CALLEXEC WaitPort
  231.     lea $5c(a4),a0
  232.     CALLEXEC GetMsg
  233.     move.l d0,WorkbenchMsg
  234.     movem.l (sp)+,d0/a0
  235. Start:
  236.     bsr.s Begin        ;Programmstart
  237.     move.l d0,-(sp)         ;Returncode retten
  238.     tst.l WorkbenchMsg
  239.     beq.s Exit
  240.     CALLEXEC Forbid
  241.     move.l WorkbenchMsg,a1
  242.     CALLEXEC ReplyMsg
  243. Exit:
  244.     move.l (sp)+,d0
  245.     rts
  246.  
  247.  
  248.  
  249.  
  250. ;***** DHB - Begin ***************************************************
  251.  
  252. Begin:
  253.  
  254. ; Libraries öffnen
  255.  
  256.     OpenLib Intname
  257.     beq    NoIntuition
  258.     move.l d0,IntBase
  259.  
  260.     OpenLib Gfxname
  261.     beq    NoGraphics
  262.     move.l d0,GfxBase
  263.  
  264.     OpenLib Dosname
  265.     beq    NoDos
  266.     move.l d0,DosBase
  267.  
  268. ; Fenster öffnen
  269.  
  270.     lea NewWindow,a0        ;Window-Definition
  271.     CALLINT OpenWindow
  272.     tst.l  d0            ;alles O.K.?
  273.     beq    NoWindow
  274.     move.l d0,Window1        ;Windowzeiger retten
  275.     move.l d0,a0
  276.     move.l $2e(a0),Screen           ;^Screen holen
  277.  
  278. ; Menue einbauen
  279.  
  280.     move.l Window1,a0
  281.     lea  My_Menu,a1
  282.     CALLINT SetMenuStrip
  283.  
  284.  
  285.     clr.l d0
  286.     bsr RefreshWindow        ;Fenster füllen
  287.  
  288.  
  289.  
  290. ;***** Auf Signal warten *********************************************
  291.  
  292. EVENT:
  293.  
  294.     move.l Window1,a0
  295.     move.l WD_USERPORT(a0),a0       ;Offset für Zeiger auf Userport
  296.     move.l a0,a5
  297.     CallExec WaitPort
  298.  
  299. ; Event ermitteln
  300.     move.l     a5,a0
  301.     CALLEXEC GetMsg
  302.     move.l     d0,a1
  303.     move.l     im_Class(a1),d4        ;Typ der Message
  304.     move.w     im_Code(a1),d5         ;Unter...?
  305.     move.l     im_IAddress(a1),a4     ;Antwort
  306.     CALLEXEC ReplyMsg
  307.  
  308.  
  309. ; Verzweigen zu zuständigem Programmteil für Event
  310.  
  311.     cmpi.l     #IDCMPCLOSEWINDOW,d4    ;Closegadget
  312.     beq     ChooseClose
  313.  
  314.     cmpi.l     #GADGETUP,d4        ;Gadget Up
  315.     beq     ChooseGadUp
  316.  
  317.     cmpi.l     #GADGETDOWN,d4     ;Gadget down
  318.     beq     ChooseGadDown
  319.  
  320.     cmpi.l     #MENUPICK,d4        ;Menu angewählt
  321.     beq     ChooseMenu
  322.  
  323.     cmpi.l     #INACTIVEWINDOW,d4    ;Fenster deaktiviert
  324.     beq     ChooseWindowOFF
  325.  
  326.     cmpi.l     #ACTIVEWINDOW,d4    ;Fenster aktiviert
  327.     beq     ChooseWindowON
  328.  
  329.  
  330.     bra Event
  331.  
  332.  
  333.  
  334. ;***** Events bearbeiten *********************************************
  335.  
  336.  
  337.  
  338. ;***** GADGET gedrückt *****
  339.  
  340. ChooseGadDown:
  341.     move.w gg_GadgetID(a4),d0
  342.     cmp.w  #0,d0
  343.     bne.L DezNo
  344.         move.l ZAHL,d0
  345.         bsr RefreshWindow
  346.         move.l $22(a4),a0       ;String Info
  347.         move.l 0(a0),a0         ;^Textpuffer
  348.         move.b #0,(a0)          ;Endekennzeichen
  349.  
  350.         lea Gadget0,a0
  351.         move.l Window1,a1
  352.         move.l #0,a2
  353.         CALLINT RefreshGadgets
  354.         PENB Window1,3
  355.         DRAWTEXT Window1,64,17,Cursor
  356.         PENB Window1,0
  357.     bra Event
  358.  
  359.  
  360. DezNo:    cmp.w  #1,d0
  361.     bne.L HexNo
  362.         move.l ZAHL,d0
  363.         bsr RefreshWindow
  364.         move.l $22(a4),a0       ;String Info
  365.         move.l 0(a0),a0         ;^Textpuffer
  366.         move.b #0,(a0)          ;Endekennzeichen
  367.  
  368.         lea Gadget0,a0
  369.         move.l Window1,a1
  370.         move.l #0,a2
  371.         CALLINT RefreshGadgets
  372.         PENB Window1,3
  373.         DRAWTEXT Window1,173,17,Cursor
  374.         PENB Window1,0
  375.     bra Event
  376.  
  377.  
  378. HexNo:    cmp.w  #2,d0
  379.     bne.L BinNo
  380.         move.l ZAHL,d0
  381.         bsr RefreshWindow
  382.         move.l $22(a4),a0       ;String Info
  383.         move.l 0(a0),a0         ;^Textpuffer
  384.         move.b #0,(a0)          ;Endekennzeichen
  385.  
  386.         lea Gadget0,a0
  387.         move.l Window1,a1
  388.         move.l #0,a2
  389.         CALLINT RefreshGadgets
  390.         PENB Window1,3
  391.         DRAWTEXT Window1,12,27,Cursor
  392.         PENB Window1,0
  393.     bra Event
  394.  
  395.  
  396. BinNo:    cmp.w  #3,d0
  397.     bne  AscNo
  398.         move.l ZAHL,d0
  399.         bsr RefreshWindow
  400.         move.l $22(a4),a0       ;String Info
  401.         move.l 0(a0),a0         ;^Textpuffer
  402.         move.b #0,(a0)          ;Endekennzeichen
  403.  
  404.         lea Gadget0,a0
  405.         move.l Window1,a1
  406.         move.l #0,a2
  407.         CALLINT RefreshGadgets
  408.         PENB Window1,3
  409.         DRAWTEXT Window1,260,17,Cursor
  410.         PENB Window1,0
  411.     bra Event
  412.  
  413. AscNo:
  414.  
  415.  
  416.     bra  Event
  417.  
  418.  
  419.  
  420. ;***** GADGET Losgelassen *****
  421.  
  422. ChooseGadUp:
  423.     move.w gg_GadgetID(a4),d0
  424.     cmp.w  #0,d0
  425.     bne NoDez
  426.         lea DezPuf,a0
  427.         bsr ADez_Bin
  428.         cmp.w #-1,d1
  429.         beq.s Dez_Err1
  430.         cmp.w #-2,d1
  431.         beq.s Dez_Err2
  432.  
  433.         clr.w ShiftCount
  434.         move.l d0,ZAHL        ;Eingelesene Zahl retten
  435.         bsr RefreshWindow
  436.         bra Event
  437.  
  438. Dez_Err1:    WINDOWTITLE Window1,Title_InvChar,About
  439.         lea Gadget0,a0
  440.         move.l Window1,a1
  441.         move.l #0,a2
  442.         CALLINT RefreshGadgets
  443.         bra Event
  444.  
  445. Dez_Err2:    WINDOWTITLE Window1,Title_Overflow,About
  446.         lea Gadget0,a0
  447.         move.l Window1,a1
  448.         move.l #0,a2
  449.         CALLINT RefreshGadgets
  450.         bra Event
  451.  
  452.  
  453.  
  454. NoDez:    cmp.w  #1,d0
  455.     bne.s  NoHex
  456.         lea HexPuf,a0
  457.         bsr AHex_Bin
  458.         tst.w d1
  459.         beq.s Hex_NoErr
  460.             WINDOWTITLE Window1,Title_InvChar,About
  461.             lea Gadget0,a0
  462.             move.l Window1,a1
  463.             move.l #0,a2
  464.             CALLINT RefreshGadgets
  465.             bra Event
  466. Hex_NoErr:    clr.w ShiftCount
  467.         move.l d0,ZAHL        ;Eingelesene Zahl retten
  468.         bsr RefreshWindow
  469.         bra Event
  470.  
  471.  
  472. NoHex:    cmp.w  #2,d0
  473.     bne.s  NoBin
  474.         lea BinPuf,a0
  475.         bsr ABIN_BIN
  476.         tst.w d1
  477.         beq.s Bin_NoErr
  478.             WINDOWTITLE Window1,Title_InvChar,About
  479.             lea Gadget0,a0
  480.             move.l Window1,a1
  481.             move.l #0,a2
  482.             CALLINT RefreshGadgets
  483.             bra Event
  484. Bin_NoErr:    clr.w ShiftCount
  485.         move.l d0,ZAHL        ;Eingelesene Zahl retten
  486.         bsr RefreshWindow
  487.         bra Event
  488.  
  489.  
  490.  
  491. NoBin:    cmp.w  #3,d0
  492.     bne.s  NoAsc
  493.         clr.l d0
  494.         lea AscPuf,a0
  495.         move.b (a0),d0
  496.         clr.w ShiftCount
  497.         move.l d0,ZAHL        ;Eingelesene Zahl retten
  498.         bsr RefreshWindow
  499.         bra Event
  500.  
  501.  
  502.  
  503. NoAsc:    cmp.w  #4,d0
  504.     bne.s  NoVZ
  505.         move.l #VZOnTxt,GadText4+12
  506.         move.w VZFlag,d1
  507.         move.w #1,VZFlag
  508.         tst.w d1
  509.         beq.s VZ_Set
  510.            move.l #VZOffTxt,GadText4+12
  511.            clr.w VZFlag
  512. VZ_Set:     move.l Zahl,d0
  513.         bsr RefreshWindow
  514.         bra Event
  515.  
  516.  
  517. NoVZ:    cmp.w  #5,d0
  518.     bne.s  NoBWL
  519.         add.w #1,BWLFlag        ;Ein Format weiter
  520.         cmp.w #2,BWLFlag
  521.         bls.s BWL_M1
  522.            clr.w BWLFlag
  523. BWL_M1:     tst.w BWLFlag
  524.         bne.s BWL_W
  525.            move.l #$000000FF,Maske
  526.            move.l #ByteTxt,GadText5+12
  527.            bra.s BWL_M2
  528. BWL_W:        cmp.w #1,BWLFlag
  529.         bne.s BWL_L
  530.            move.l #$0000FFFF,Maske
  531.            move.l #WordTxt,GadText5+12
  532.            bra.s BWL_M2
  533. BWL_L:        move.l #$FFFFFFFF,Maske
  534.         move.l #LongTxt,GadText5+12
  535.  
  536. BWL_M2:     move.l ZAHL,d0
  537.         bsr RefreshWindow
  538.         bra Event
  539.  
  540.  
  541. NoBWL:    cmp.w  #6,d0
  542.     bne.s SHRNo
  543.         move.l Zahl,d0
  544.         add.w #1,ShiftCount
  545.         cmp.w #33,ShiftCount
  546.         blt.s SHR_OK
  547.            sub.w #1,ShiftCount
  548.            move.l Screen,a0
  549.            CALLINT DisplayBeep
  550. SHR_OK:     bsr RefreshWindow
  551.     bra Event
  552.  
  553. SHRNo:    cmp.w  #7,d0
  554.     bne.s SHLNo
  555.         move.l Zahl,d0
  556.         sub.w #1,ShiftCount
  557.         cmp.w #-33,ShiftCount
  558.         bgt.s SHL_OK
  559.            add.w #1,ShiftCount
  560.            move.l Screen,a0
  561.            CALLINT DisplayBeep
  562. SHL_OK:     bsr RefreshWindow
  563.     bra Event
  564.  
  565. SHLNo:
  566.     bra  Event
  567.  
  568.  
  569.  
  570. ;***** Menu gewählt **************************************************
  571.  
  572. ChooseMenu:
  573.     cmp.w #$FFFF,d5     ;Kein Menue angewählt ?
  574.     beq Event
  575.  
  576. ;Nur ein wählbarer Punkt vorhanden !
  577.  
  578.     move.l Window1,a0
  579.     move.l $52(a0),d0       ;IDCMP's aus der Windowstruktur
  580.  
  581.     move.w I1_Check,d1    ;Prüfen wie der Menupunkt steht
  582.     btst #8,d1        ;"Checked" testen
  583.     beq GD_Aus
  584.     or.l #GADGETDOWN,d0    ;Reaktion auf Gadgetdrücken EIN
  585.     bra GD_Weiter
  586. GD_Aus: and.l #~GADGETDOWN,d0    ;Reaktion AUS
  587. GD_Weiter:
  588.     CALLINT ModifyIDCMP
  589.     bra Event
  590.  
  591.  
  592. ;***** Anderes Window angeklickt *************************************
  593.  
  594. ChooseWindowOFF:
  595.     move.l ZAHL,d0
  596.     bsr RefreshWindow
  597.     WINDOWTITLE Window1,Title_Aus,About
  598.     bra Event
  599.  
  600. ;***** Wieder Activiert *****
  601.  
  602. ChooseWindowON:
  603.     WINDOWTITLE Window1,Title_OK,About
  604.     bra Event
  605.  
  606.  
  607.  
  608. ;*********************************************************************
  609.  
  610.  
  611.  
  612. ChooseClose:
  613.  
  614. ;***** NACHPROGRAMM **************************************************
  615.  
  616. ; Fenster schließen
  617.     move.l Window1,a0
  618.     CallInt CloseWindow
  619.  
  620. ; Libraries schließen
  621. NoWindow:
  622.     CloseLib DosBase
  623.  
  624. NoDos:
  625.     CloseLib GfxBase
  626.  
  627. NoGraphics:
  628.     CloseLib IntBase
  629.  
  630. NoIntuition:
  631.     moveq #0,d0
  632.  
  633.     rts            ;Programmende
  634.  
  635.  
  636.  
  637.  
  638.  
  639. ;*********************************************************************
  640. ;*   Unterprogramme                             *
  641. ;*********************************************************************
  642.  
  643. ;***** Fensterinhalt aufbauen (Bei sizing) ***************************
  644.  
  645. RefreshWindow:
  646.  
  647.     WINDOWTITLE Window1,Title_OK,About
  648.  
  649.     move.w ShiftCount,d1
  650.     bmi RightShift
  651.     lsr.l d1,d0
  652.     bra SH_Weiter
  653. RightShift:
  654.     move.w #64,d2
  655.     sub.w d1,d2
  656.     lsl.l d2,d0
  657. SH_Weiter:
  658.  
  659.     move.l Maske,d1
  660.     move.w VZFlag,d2
  661.  
  662.     lea DezPuf,a0
  663.     bsr Bin_ADez
  664.  
  665.     lea HexPuf,a0
  666.     bsr Bin_AHex
  667.  
  668.     lea BinPuf,a0
  669.     bsr Bin_ABin
  670.  
  671.     lea AscPuf,a0
  672.     move.b d0,(a0)
  673.  
  674.  
  675.     DRAWTEXT Window1,55,17,DezZei
  676.     DRAWTEXT Window1,164,17,HexZei
  677.     DRAWTEXT Window1,4,27,BinZei
  678.     DRAWTEXT Window1,249,17,AscZei
  679.  
  680.     lea Gadget0,a0
  681.     move.l Window1,a1
  682.     move.l #0,a2
  683.     CALLINT RefreshGadgets
  684.     rts
  685.  
  686.  
  687.  
  688.  
  689. ;***** Zeichnen eines Textes (abgeschlossen mit \0) ******************
  690.  
  691. ;A: ^String -> a0; Window -> a1; X,Y -> d0,d1;
  692. ;R: -
  693.  
  694. _DRAWTEXT:
  695.     movem.l d0-d3/a0/a3/a5/a6,-(sp)
  696.  
  697.     move.l a0,a3
  698. ;Länge des Strings ermitteln
  699.     move.l #-1,d3
  700. DTL:    addq.l #1,d3
  701.     cmp.b #0,(a0)+
  702.     bne.s DTL
  703.  
  704.     move.l WD_RPort(a1),a1  ; Adresse des Rastports holen
  705.     move.l a1,a5
  706.     move.l GfxBase,a6
  707.     jsr Move(a6)            ;Grafikcursor setzen
  708.     move.l a5,a1
  709.     move.l a3,a0
  710.     move.l d3,d0
  711.     jsr Text(a6)
  712.  
  713.     movem.l (sp)+,d0-d3/a0/a3/a5/a6
  714.     rts
  715.  
  716.  
  717.  
  718.  
  719. ;***** DIVISION 32 BIT DURCH 32 BIT **********************************
  720. ;A: Divident(long) -> d0; Divisor(long) -> d1  ( d0 / d1 !)
  721. ;R: Ergebnis(long) -> d0; Rest(long) -> d1
  722. Divu32:
  723.     movem.l d2/d3/d4,-(sp)
  724.  
  725.     clr.l d2
  726.     clr.l d3
  727.     move.l #32-1,d4     ;Zähler
  728.  
  729. DivLoop:
  730.     lsl.l #1,d0        ;Bit 31 von d0 nach
  731.     roxl.l #1,d2        ;Bit 0 von d2 und beide shiften
  732.  
  733. ;    andi.b #$ef,SR        ;X-Flag löschen
  734.     cmp.l d2,d1        ;Wenn Divident größer d2 dann
  735.     bhi.s BitIs0        ; ist diese Ziffer = 0
  736.     sub.l d1,d2        ;Divident von Zwischenwert subtrahier.
  737.     ori.b  #$10,SR        ;X-Flag setzen
  738. BitIs0: roxl.l #1,d3        ;X-Flag ins Ergebnis rollen
  739.     dbra d4,DivLoop
  740.  
  741.     move.l d3,d0
  742.     move.l d2,d1
  743.  
  744.     movem.l (sp)+,d2/d3/d4
  745.     rts
  746.  
  747.  
  748.  
  749.  
  750.  
  751. ;*********************************************************************
  752. ;*     ASCII-String -> binäre Zahl                     *
  753. ;*********************************************************************
  754.  
  755. ;***** DEZIMALEN ASCII-STRING IN BINAERE ZAHL *****
  756.  
  757. ;A: ^ASCII-Puffer in -> a0;
  758. ;R: Long-Zahl in -> d0; Fehlercode in -> d1
  759. ;   (0 = OK; -1 = keine Dez-Zahl; -2 = Overflow)
  760.  
  761. ADez_Bin:
  762.     movem.l d2-d5/a0,-(sp)
  763.  
  764. ; *** Zuerst Vorzeichen suchen (erstes Zeichen das nicht Space ist)
  765.     clr.l d1        ;Fehlercode mit 0 vorbelegen
  766.     clr.l d4        ;VZ-Flag
  767.     move.l #11-1,d2     ;Zähler
  768. ADB_VZLoop:
  769.     move.b (a0),d3
  770.     cmp.b #0,d3        ;Auf Endekennzeichen testen
  771.     beq  ADB_Er
  772.     cmp.b #' ',d3           ;Space überspringen
  773.     beq.s ADB_S1
  774.     cmp.b #'-',d3           ;Minus Zeichen ?
  775.     beq.s ADB_Mi
  776.     cmp.b #'+',d3           ;Plus Zeichen ?
  777.     beq.s ADB_Pl
  778.     bra.s ADB_Weiter    ;Alles andere später prüfen
  779. ADB_S1: addq.l #1,a0
  780.     dbra  d2,ADB_VZLoop
  781.     bra.s ADB_Er        ;11. Zeichen darf kein Minus sein
  782.  
  783. ADB_Mi: move.w #1,d4        ;VZ negativ
  784. ADB_Pl: addq.l #1,a0        ;VZ überspringen
  785.  
  786. ADB_Weiter:
  787.     clr.l d0        ;Zahl auf 0 setzen
  788.     clr.l d3
  789. ADB_Loop:
  790.     move.b (a0)+,d3
  791.     cmp.b #0,d3        ;Auf Endekennzeichen testen
  792.     beq.s ADB_End
  793.     cmp.b #' ',d3           ;Space überspringen
  794.     beq.s ADB_Sp
  795.     cmp.b #'0'-1,d3         ;Zwischen 0-9 ?
  796.     bls.s ADB_Er
  797.     cmp.b #'9',d3
  798.     bhi.s ADB_Er
  799.     sub.b #'0',d3           ;ASCII in Binär wandeln
  800.  
  801.     move.w d0,d5        ;Multiplikation:
  802.     mulu  #10,d5        ;   32 Bit-Zahl * 10 =
  803.     swap d0         ; = LSW*10 + MSW*10*2^16 =
  804.     mulu  #10,d0        ; = 32 Bit-Zahl
  805.        cmp.l #$ffff,d0    ;Wenn größer als Wort
  806.        bhi ADB_Er2        ; dann Overflow
  807.     bvs ADB_Er2
  808.     swap d0
  809.     clr.w d0
  810.     add.l d5,d0        ;Wenn Ergebnis größer 32 Bit
  811.     bcs ADB_Er2        ; dann Overflow
  812.  
  813.  
  814.     add.l d3,d0
  815. ADB_SP: dbra d2,ADB_Loop
  816.     bra.s ADB_End
  817. ADB_Er2:
  818.     move.l #-2,d1        ;Fehlercode für Overflow
  819.     clr.l d0        ;Ergebnis löschen
  820.     bra ADB_End
  821.  
  822. ADB_Er: move.l #-1,d1        ;Fehlercode wenn keine Dezimalziffer
  823.     clr.l d0        ;Ergebnis = 0
  824.  
  825. ADB_End:
  826.     tst.w d4        ;VZ-Flag testen
  827.     beq.s ADB_Pos
  828.     neg.l d0        ;Wenn "-" dann Zahl negieren
  829. ADB_Pos:
  830.     movem.l (sp)+,d2-d5/a0
  831.     rts
  832.  
  833.  
  834.  
  835. ;***** HEXADEZIMALEN ASCII-STRING IN BINäARE ZAHL *****
  836.  
  837. ;A: ^ASCII-Puffer in -> a0;
  838. ;R: Long-Zahl in -> d0; Fehlercode in -> d1 (0=OK, -1=Fehler)
  839. AHex_Bin:
  840.     movem.l d2/d3/a0,-(sp)
  841.  
  842.     clr.l d0
  843.     clr.l d1
  844.     move.l #8-1,d2        ;Zähler
  845. AHB_Loop:
  846.     move.b (a0)+,d3
  847.     cmp.b #0,d3        ;Auf Endekennzeichen testen
  848.     beq.s AHB_End
  849.     cmp.b #' ',d3           ;Space überspringen
  850.     beq.s AHB_Sp
  851.     cmp.b #'0'-1,d3         ;Zwischen 0-9 ?
  852.     bls.s AHB_Er
  853.     cmp.b #'9',d3
  854.     bls.s AHB_Za
  855.     and.b #%11011111,d3    ;Umwandeln in Großbuchstaben
  856.     cmp.b #'A'-1,d3         ;Zwischen A-F ?
  857.     bls.s AHB_Er
  858.     cmp.b #'F',d3
  859.     bhi.s AHB_Er
  860.     sub.b #7,d3
  861. AHB_Za: sub.b #'0',d3           ;Umwandeln in 4-BIT-Zahl
  862.     lsl.l #4,d0        ;Ein Nibble weiter
  863.     or.b  d3,d0        ;Zum Ergebnis addieren
  864. AHB_Sp: dbra d2,AHB_Loop
  865.     bra.s AHB_End
  866.  
  867. AHB_Er: move.l #-1,d1        ;Fehlercode wenn keine Hexziffer
  868.     clr.l d0        ;Ergebnis = 0
  869. AHB_End:
  870.     movem.l (sp)+,d2/d3/a0
  871.     rts
  872.  
  873.  
  874.  
  875. ;***** BINäREN ASCII-STRING IN BINäARE ZAHL *****
  876. ;A: ^ASCII-Puffer in -> a0;
  877. ;R: Long-Zahl in -> d0; Fehlercode in -> d1 (0=OK, -1=Fehler)
  878. ABin_Bin:
  879.     movem.l d2/a0,-(sp)
  880.  
  881.     clr.l d0
  882.     clr.l d1
  883.     move.l #32-1,d2     ;Zähler
  884. ABB_Loop:
  885.     cmp.b #0,(a0)           ;Auf Endekennzeichen testen
  886.     beq.s ABB_End
  887.     cmp.b #' ',(a0)         ;Space überspringen
  888.     beq.s ABB_Sp
  889.     cmp.b #'0',(a0)
  890.     beq.s ABB_0
  891.     cmp.b #'1',(a0)
  892.     beq.s ABB_1
  893.     bra.s ABB_Er        ;Alles außer 0," ","0","1", -> Fehler
  894. ABB_0:    lsl.l #1,d0
  895.     bra.s ABB_Sp
  896. ABB_1:    lsl.l #1,d0
  897.     bset #0,d0
  898. ABB_Sp: addq.l #1,a0
  899.     dbra d2,ABB_Loop
  900.     bra.s ABB_End
  901.  
  902. ABB_Er: move.l #-1,d1        ;Fehlercode
  903.     clr.l d0        ;Ergebnis = 0
  904. ABB_End:
  905.     movem.l (sp)+,d2/a0
  906.     rts
  907.  
  908.  
  909.  
  910.  
  911.  
  912. ;*********************************************************************
  913. ;*     binäre Zahl -> ASCII-String                     *
  914. ;*********************************************************************
  915.  
  916. ;***** BINÄRE ZAHL IN DEZIMALEN ASCII-STRING *****
  917.  
  918. ;A: ^ASCII-Puffer in -> a0; Long-Zahl in -> d0; Maske(b,w,l) in -> d1;
  919. ;A: VorzeichenFlag (VZ beachten ja=1, nein=0) -> d2.w;
  920. ;R: --
  921. Bin_ADez:
  922.     movem.l d0-d4/a0,-(sp)
  923.  
  924.     move.b #' ',d3
  925.     tst.w d2        ;Vorzeichen beachten ?
  926.     beq.s BAD_POS
  927.  
  928.     btst #31,d1        ;Vorzeichenbit ermitteln
  929.     beq.s Not31
  930.        move.l #31,d4
  931.        bra.s BAD_VZ
  932. Not31:    btst #15,d1
  933.     beq.s Not15
  934.        move.l #15,d4
  935.        bra.s BAD_VZ
  936. Not15:    move.l #7,d4
  937.  
  938. BAD_VZ: move.b #'+',d3          ;VZ-Merker
  939.     btst d4,d0
  940.     beq  BAD_POS
  941.     neg.l d0
  942.     move.b #'-',d3
  943. BAD_POS:
  944.     and.l d1,d0
  945.  
  946.     move.l #11-1,d2     ;Zähler (11 Zeichen!)
  947. BAD_Fill:
  948.     move.b #' ',(a0)+       ;Puffer mit Spaces füllen
  949.     dbra  d2,BAD_Fill    ;Danach steht a0 am Ende des Puffers
  950.  
  951.     tst.l d0        ;Wenn Zahl=0 dann wenigstens eine
  952.     beq.s BAD_Null        ; Null ausgeben
  953.     move.l #10-1,d2     ;Zähler (10 Ziffern)
  954.  
  955. BAD_Loop:
  956.     tst.l d0        ;Führende Nullen unterdrücken
  957.     beq.s BAD_End
  958.     moveq #10,d1        ;d0 durch 10 teilen
  959.     bsr Divu32        ;32-Bit Division
  960.     add.b #'0',d1           ;In ASCII umwandeln
  961.     move.b d1,-(a0)
  962.     dbra d2,BAD_Loop
  963.     bra.s BAD_End
  964. BAD_Null:
  965.     move.b #'0',-(a0)       ;Einzelne Null ausgeben
  966. BAD_End:
  967.     move.b d3,-(a0)         ;VZ ausgeben
  968.  
  969.     movem.l (sp)+,d0-d4/a0
  970.     rts
  971.  
  972.  
  973.  
  974.  
  975. ;***** BINÄRE ZAHL IN HEXADEZIMALEN ASCII-STRING *****
  976.  
  977. ;A: Long-Zahl in -> d0; ^ASCII-Puffer in -> a0; Maske(b,w,l) in -> d1;
  978. ;R: --
  979. Bin_AHex:
  980.     movem.l d0/d1/d2/d3/a0,-(sp)
  981.  
  982.     add.l #8,a0        ;ans Pufferende
  983.     move.l #8-1,d2        ;Zähler
  984. BAH_Loop:
  985.     lsr.l #4,d1        ;Maske shiften
  986.     bcs.s BAH_Weiter
  987.     move.b #' ',-(a0)       ;Space setzen
  988.     bra.s BAH_end
  989. BAH_weiter:
  990.     move.l d0,d3        ;d0 muß erhalten bleiben
  991.     and.b  #$0F,d3        ;Unterstes Nibble stehenlassen
  992.     add.b  #'0',d3
  993.     cmp.b  #'9',d3
  994.     bls    BAH_Z        ;Wenn d3<=9 dann Zahl
  995.     add.b  #7,d3        ;Sonst Buchstabe
  996. BAH_Z:    move.b d3,-(a0)
  997.     lsr.l  #4,d0
  998. BAH_end:
  999.     dbra d2,BAH_loop
  1000.  
  1001.     movem.l (sp)+,d0/d1/d2/d3/a0
  1002.     rts
  1003.  
  1004.  
  1005.  
  1006. ;***** BINÄRE ZAHL IN BINäREN ASCII-STRING *****
  1007.  
  1008. ;A: Long-Zahl in -> d0; ^ASCII-Puffer in -> a0; Maske(b,w,l) in -> d1;
  1009. ;R: --
  1010. Bin_ABin:
  1011.     movem.l d0/d1/d2/a0,-(sp)
  1012.  
  1013.     add.l #32,a0            ;ans Pufferende
  1014.     move.l #32-1,d2         ;Zähler
  1015. BAB_loop:
  1016.     lsr.l #1,d1            ;Maske shiften
  1017.     bcs.s BAB_weiter
  1018.     move.b #' ',-(a0)               ;Space setzen
  1019.     bra.s BAB_end
  1020. BAB_weiter:
  1021.     lsr.l #1,d0
  1022.     bcc.s BAB_null
  1023.     move.b #'1',-(a0)               ;1 setzen
  1024.     bra.s BAB_end
  1025. BAB_null:
  1026.     move.b #'0',-(a0)               ;0 setzen
  1027. BAB_end:
  1028.     dbra d2,BAB_loop
  1029.  
  1030.     movem.l (sp)+,d0/d1/d2/a0
  1031.     rts
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038. ;*********************************************************************
  1039. ;*  Vereinbarungsteil                             *
  1040. ;*********************************************************************
  1041.  
  1042.  
  1043. ;***  STRINGS  *******************************************************
  1044.  
  1045. About:        ASCII 'DezHexBin V1.1     \169 Michael Djavidan'
  1046.         ASCII ' 1/90 \0'
  1047. Title_OK:    ASCII ' OK                     \0'
  1048. Title_Overflow: ASCII ' Overflow               \0'
  1049. Title_InvChar    ASCII ' Invalid Character      \0'
  1050. Title_Aus:    ASCII ' Standby                \0'
  1051.  
  1052. M1_Title:    ASCII '  DHB\0'
  1053. Item1_Txt:    ASCII 'Auto-Clear\0'
  1054.  
  1055. Cursor:     ASCII ' \0'
  1056.  
  1057. DezZei:     ASCII 'd\0'
  1058. HexZei:     ASCII '$\0'
  1059. BinZei:     ASCII '%\0'
  1060. AscZei:     ASCII 'a\0'
  1061.  
  1062. DezPuf:     ASCII '\0          \0'                       ;11 + \0
  1063. HexPuf:     ASCII '\0       \0'                          ;8 + \0
  1064. BinPuf:     ASCII '\0                               \0'  ;32 + \0
  1065. AscPuf:     ASCII '\0\0'                                 ;1 + \0
  1066. UndoPuf:    ASCII 'UNDO-UNDO-UNDO-UNDO-UNDO-UNDO-UNDO'
  1067.  
  1068. VZOnTxt:    ASCII "±\0"
  1069. VZOffTxt:    ASCII '+\0'
  1070. ByteTxt:    ASCII 'B\0'
  1071. WordTxt:    ASCII 'W\0'
  1072. LongTxt:    ASCII 'L\0'
  1073. SHRTxt:     ASCII "»\0"
  1074. SHLTxt:     ASCII "«\0"
  1075.  
  1076. Intname:    ASCII 'intuition.library\0'
  1077. Gfxname:    ASCII 'graphics.library\0'
  1078. Dosname:    ASCII 'dos.library\0'
  1079.         cnop 2
  1080.  
  1081.  
  1082. ;***  Variablen  *****************************************************
  1083.  
  1084. WorkbenchMsg:    dc.l 0        ;Message vom Startup-Code
  1085.  
  1086. DosBase:    dc.l 0
  1087. IntBase:    dc.l 0
  1088. GfxBase:    dc.l 0
  1089.  
  1090. Window1:    dc.l 0        ;Adresse der Windowstruktur
  1091. Screen:     dc.l 0        ;Adresse der Screenstruktur
  1092.  
  1093. ZAHL:        dc.l 0        ;UM DIESE ZAHL DREHT SICH ALLES
  1094. ShiftCount:    dc.w 0        ;Anzahl Stellen der Verschiebung
  1095.  
  1096. VZFlag:     dc.w 0        ;Vorzeichen ein/aus
  1097. BWLFlag:    dc.w 2        ;Format der Anzeige (B/W/L = 0/1/2)
  1098. Maske:        dc.l $FFFFFFFF    ;Maske zur Anzeige der Stellen
  1099.  
  1100.  
  1101. ;*****    Strukturen  **************************************************
  1102.  
  1103. ;***** WINDOW *****
  1104.  
  1105. IDCMP1:     equ IDCMPCLOSEWINDOW!GADGETUP!MENUPICK!GADGETDOWN
  1106. WIND1IDCMP:    equ IDCMP1!INACTIVEWINDOW!ACTIVEWINDOW
  1107.  
  1108. WFlags1:    equ ACTIVATE!WINDOWCLOSE!WINDOWDRAG
  1109. WFlags:     equ WFLAGS1!WINDOWDEPTH
  1110.  
  1111. NewWindow:
  1112.     dc.w    200,100         ;links-oben
  1113.     dc.w    279,30            ;Breite, Höhe
  1114.     dc.b    2,-1            ;Screenpens
  1115.     dc.l    WIND1IDCMP        ;IDCMP-Flags
  1116.     dc.l    WFlags            ;Window-Flags
  1117.     dc.l    Gadget0         ;User-Gadgets
  1118.     dc.l    0            ;User-Checkmark
  1119.     dc.l    Title_OK        ;Titel
  1120.     dc.l    0            ;Eigener Screen
  1121.     dc.l    0            ;Super Bitmap
  1122.     dc.w    100,20            ;Min.
  1123.     dc.w    640,200         ;Max.
  1124.     dc.w    1            ;WBscreen benutzen
  1125.  
  1126.  
  1127.  
  1128. ;***** GADGETS ******************************************************
  1129.  
  1130. ;***** STRINGGADGET FüR DEZIMALE EINGABE *****
  1131.  
  1132. Gadget0:
  1133.     dc.l    Gadget1     ;noch eins
  1134.     dc.w    64,11        ;x,y
  1135.     dc.w    96,8        ;breit,hoch
  1136.     dc.w    0        ;flags
  1137.     dc.w    RELVERIFY!GADGIMMEDIATE ;Aktivierung
  1138.     dc.w    STRGADGET    ;Typ
  1139.     dc.l    Border0     ;^Border-Strukt.
  1140.     dc.l    0
  1141.     dc.l    0        ;^Text-Strukt.
  1142.     dc.l    0
  1143.     dc.l    Str0Info
  1144.     dc.w    0        ;ID
  1145.     dc.l    0
  1146. Border0:
  1147.     dc.w    0,-1        ;x,y
  1148.     dc.b    1,0        ;Pens (BackPen ohne Wirkung)
  1149.     dc.b    RP_JAM1
  1150.     dc.b    9        ;Paare
  1151.     dc.l    Koord0        ;^Liste
  1152.     dc.l    0        ;kein Border mehr
  1153. Koord0:
  1154.     dc.w    -11,-1        ;Koord.-Liste
  1155.     dc.w    -11,9
  1156.     dc.w    -12,-1
  1157.     dc.w    -12,9
  1158.     dc.w    97,9
  1159.     dc.w    97,-1
  1160.     dc.w    98,9
  1161.     dc.w    98,-1
  1162.     dc.w    -11,-1
  1163. Str0Info:
  1164.     dc.l    DEZPUF        ;^Arbeitspuffer
  1165.     dc.l    UNDOPUF     ;^UndoPuffer
  1166.     dc.w    0        ;Anfangs-Cursor-Position
  1167.     dc.w    12        ;Puffergröße+1
  1168.     dc.w    11        ;Pos. Cursor Zeichen
  1169.     dc.w    11        ;Zahl Zeichen im Puffer
  1170.     dc.w    11        ;Zeichen sichtbar
  1171.     dc.w    0,0        ;Lage des Rahmens
  1172.     dc.l    0        ;^Layer des Gadgets
  1173.     dc.l    0        ;Long Int hier
  1174.     dc.l    0        ;^eigene Keymap
  1175.  
  1176.  
  1177. ;***** STRINGGADGET FüR HEXADEZIMALE EINGABE *****
  1178.  
  1179. Gadget1:
  1180.     dc.l    Gadget2     ;noch eins
  1181.     dc.w    173,11        ;x,y
  1182.     dc.w    72,8        ;breit,hoch
  1183.     dc.w    0        ;flags
  1184.     dc.w    RELVERIFY!GADGIMMEDIATE ;Aktivierung
  1185.     dc.w    STRGADGET    ;Typ
  1186.     dc.l    Border1     ;^Border-Strukt.
  1187.     dc.l    0
  1188.     dc.l    0        ;^Text-Strukt.
  1189.     dc.l    0
  1190.     dc.l    Str1Info
  1191.     dc.w    1        ;ID
  1192.     dc.l    0
  1193. Border1:
  1194.     dc.w    0,0        ;x,y
  1195.     dc.b    1,0        ;Pens (BackPen ohne Wirkung)
  1196.     dc.b    RP_JAM1
  1197.     dc.b    9        ;Paare
  1198.     dc.l    Koord1        ;^Liste
  1199.     dc.l    0        ;kein Border mehr
  1200. Koord1:
  1201.     dc.w    -11,-2        ;Koord.-Liste
  1202.     dc.w    -11,8
  1203.     dc.w    -12,-2
  1204.     dc.w    -12,8
  1205.     dc.w    73,8
  1206.     dc.w    73,-2
  1207.     dc.w    74,8
  1208.     dc.w    74,-2
  1209.     dc.w    -11,-2
  1210.  
  1211. Str1Info:
  1212.     dc.l    HEXPUF        ;^Arbeitspuffer
  1213.     dc.l    UNDOPUF     ;^UndoPuffer
  1214.     dc.w    0        ;Anfangs-Cursor-Position
  1215.     dc.w    9        ;Puffergröße+1
  1216.     dc.w    8        ;Pos. Cursor Zeichen
  1217.     dc.w    8        ;Zahl Zeichen im Puffer
  1218.     dc.w    8        ;Zeichen sichtbar
  1219.     dc.w    0,0        ;Lage des Rahmens
  1220.     dc.l    0        ;^Layer des Gadgets
  1221.     dc.l    0        ;Long Int hier
  1222.     dc.l    0        ;^eigene Keymap
  1223.  
  1224.  
  1225.  
  1226. ;***** STRINGGADGET FüR BINäRE EINGABE *****
  1227.  
  1228. Gadget2:
  1229.     dc.l    Gadget3     ;noch eins
  1230.     dc.w    12,21        ;x,y
  1231.     dc.w    264,11        ;breit,hoch
  1232.     dc.w    0        ;flags
  1233.     dc.w    RELVERIFY!GADGIMMEDIATE ;Aktivierung
  1234.     dc.w    STRGADGET    ;Typ
  1235.     dc.l    Border2     ;^Border-Strukt.
  1236.     dc.l    0
  1237.     dc.l    0        ;^Text-Strukt.
  1238.     dc.l    0
  1239.     dc.l    Str2Info
  1240.     dc.w    2        ;ID
  1241.     dc.l    0
  1242. Border2:
  1243.     dc.w    0,0        ;x,y
  1244.     dc.b    1,0        ;Pens (BackPen ohne Wirkung)
  1245.     dc.b    RP_JAM1
  1246.     dc.b    9        ;Paare
  1247.     dc.l    Koord2        ;^Liste
  1248.     dc.l    0        ;kein Border mehr
  1249. Koord2:
  1250.     dc.w    -11,-2        ;Koord.-Liste
  1251.     dc.w    -11,8
  1252.     dc.w    -12,-2
  1253.     dc.w    -12,8
  1254.     dc.w    265,8
  1255.     dc.w    265,-2
  1256.     dc.w    266,8
  1257.     dc.w    266,-2
  1258.     dc.w    -11,-2
  1259. Str2Info:
  1260.     dc.l    BINPUF        ;^Arbeitspuffer
  1261.     dc.l    UNDOPUF     ;^UndoPuffer
  1262.     dc.w    0        ;Anfangs-Cursor-Position
  1263.     dc.w    33        ;Puffergröße+1
  1264.     dc.w    32        ;Pos. Cursor Zeichen
  1265.     dc.w    32        ;Zahl Zeichen im Puffer
  1266.     dc.w    32        ;Zeichen sichtbar
  1267.     dc.w    0,0        ;Lage des Rahmens
  1268.     dc.l    0        ;^Layer des Gadgets
  1269.     dc.l    0        ;Long Int hier
  1270.     dc.l    0        ;^eigene Keymap
  1271.  
  1272.  
  1273.  
  1274.  
  1275. ;***** STRINGGADGET FüR EINGABE EINES ASCII-ZEICHENS *****************
  1276.  
  1277. Gadget3:
  1278.     dc.l    Gadget4     ;noch eins
  1279.     dc.w    260,11        ;x,y
  1280.     dc.w    16,8        ;breit,hoch
  1281.     dc.w    0        ;flags
  1282.     dc.w    RELVERIFY!GADGIMMEDIATE ;Aktivierung
  1283.     dc.w    STRGADGET    ;Typ
  1284.     dc.l    Border3     ;^Border-Strukt.
  1285.     dc.l    0
  1286.     dc.l    0        ;^Text-Strukt.
  1287.     dc.l    0
  1288.     dc.l    Str3Info
  1289.     dc.w    3        ;ID
  1290.     dc.l    0
  1291. Border3:
  1292.     dc.w    0,-2         ;x,y
  1293.     dc.b    1,0        ;Pens (BackPen ohne Wirkung)
  1294.     dc.b    RP_JAM1
  1295.     dc.b    9        ;Paare
  1296.     dc.l    Koord3        ;^Liste
  1297.     dc.l    0        ;kein Border mehr
  1298. Koord3:
  1299.     dc.w    -13,0           ;Koord.-Liste
  1300.     dc.w    -13,10
  1301.     dc.w    -14,0
  1302.     dc.w    -14,10
  1303.     dc.w    17,10
  1304.     dc.w    17,0
  1305.     dc.w    18,10
  1306.     dc.w    18,0
  1307.     dc.w    -13,0
  1308.  
  1309. Str3Info:
  1310.     dc.l    ASCPUF         ;^Arbeitspuffer
  1311.     dc.l    UNDOPUF     ;^UndoPuffer
  1312.     dc.w    0        ;Anfangs-Cursor-Position
  1313.     dc.w    2        ;Puffergröße+1
  1314.     dc.w    1        ;Pos. Cursor Zeichen
  1315.     dc.w    1        ;Zahl Zeichen im Puffer
  1316.     dc.w    1        ;Zeichen sichtbar
  1317.     dc.w    0,0        ;Lage des Rahmens
  1318.     dc.l    0        ;^Layer des Gadgets
  1319.     dc.l    0        ;Long Int hier
  1320.     dc.l    0        ;^eigene Keymap
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326. ;***** GADGET ZUM EIN/AUSSCHALTEN DES VORZEICHENS ********************
  1327.  
  1328. Gadget4:
  1329.     dc.l    Gadget5     ;noch eins
  1330.     dc.w    41,10        ;x,y
  1331.     dc.w    11,9        ;breit,hoch
  1332.     dc.w    GADGHCOMP    ;flags
  1333.     dc.w    RelVerify    ;Aktivierung
  1334.     dc.w    BOOLGADGET    ;Typ
  1335.     dc.l    Border4     ;^Border-Strukt.
  1336.     dc.l    0
  1337.     dc.l    Gadtext4    ;^Text-Strukt.
  1338.     dc.l    0,0
  1339.     dc.w    4        ;ID
  1340.     dc.l    0
  1341. Border4:
  1342.     dc.w    -2,0        ;x,y
  1343.     dc.b    1,0        ;Pens (BackPen ohne Wirkung)
  1344.     dc.b    RP_JAM1
  1345.     dc.b    4        ;Paare
  1346.     dc.l    Koord4        ;^Liste
  1347.     dc.l    0        ;kein Border mehr
  1348. Koord4:
  1349.     dc.w    0,0        ;Koord.-Liste
  1350.     dc.w    0,8
  1351.     dc.w    1,8
  1352.     dc.w    1,0
  1353. GadText4:
  1354.     dc.b    1,0        ;Pens
  1355.     dc.b    RP_JAM2,0
  1356.     dc.w    2,1        ;x,y
  1357.     dc.l    0        ;Sys-Font
  1358.     dc.l    VZOffTxt
  1359.     dc.l    0
  1360.  
  1361.  
  1362. ;***** GADGET ZUM EINSTELLEN DES FORMATS (B,W,L) *********************
  1363.  
  1364. Gadget5:
  1365.     dc.l    Gadget6     ;noch eins
  1366.     dc.w    28,10        ;x,y
  1367.     dc.w    11,9        ;breit,hoch
  1368.     dc.w    GADGHCOMP    ;flags
  1369.     dc.w    RelVerify    ;Aktivierung
  1370.     dc.w    BOOLGADGET    ;Typ
  1371.     dc.l    Border5     ;^Border-Strukt.
  1372.     dc.l    0
  1373.     dc.l    Gadtext5    ;^Text-Strukt.
  1374.     dc.l    0,0
  1375.     dc.w    5        ;ID
  1376.     dc.l    0
  1377. Border5:
  1378.     dc.w    -2,0        ;x,y
  1379.     dc.b    1,0        ;Pens (BackPen ohne Wirkung)
  1380.     dc.b    RP_JAM1
  1381.     dc.b    4        ;Paare
  1382.     dc.l    Koord5        ;^Liste
  1383.     dc.l    0        ;kein Border mehr
  1384. Koord5:
  1385.     dc.w    0,0        ;Koord.-Liste
  1386.     dc.w    0,8
  1387.     dc.w    1,8
  1388.     dc.w    1,0
  1389. GadText5:
  1390.     dc.b    1,0        ;Pens
  1391.     dc.b    RP_JAM2,0
  1392.     dc.w    2,1        ;x,y
  1393.     dc.l    0        ;Sys-Font
  1394.     dc.l    LongTxt
  1395.     dc.l    0
  1396.  
  1397.  
  1398.  
  1399. ;***** GADGET FüR SHIFT RECHTS ***************************************
  1400.  
  1401. Gadget6:
  1402.     dc.l    Gadget7     ;noch eins
  1403.     dc.w    15,10        ;x,y
  1404.     dc.w    11,9        ;breit,hoch
  1405.     dc.w    GADGHCOMP    ;flags
  1406.     dc.w    RELVERIFY    ;Aktivierung
  1407.     dc.w    BOOLGADGET    ;Typ
  1408.     dc.l    Border6     ;^Border-Strukt.
  1409.     dc.l    0
  1410.     dc.l    Gadtext6    ;^Text-Strukt.
  1411.     dc.l    0,0
  1412.     dc.w    6        ;ID
  1413.     dc.l    0
  1414. Border6:
  1415.     dc.w    -2,0        ;x,y
  1416.     dc.b    1,0        ;Pens (BackPen ohne Wirkung)
  1417.     dc.b    RP_JAM1
  1418.     dc.b    4        ;Paare
  1419.     dc.l    Koord6        ;^Liste
  1420.     dc.l    0        ;kein Border mehr
  1421. Koord6:
  1422.     dc.w    0,0        ;Koord.-Liste
  1423.     dc.w    0,8
  1424.     dc.w    1,8
  1425.     dc.w    1,0
  1426. GadText6:
  1427.     dc.b    1,0        ;Pens
  1428.     dc.b    RP_JAM2,0
  1429.     dc.w    2,1        ;x,y
  1430.     dc.l    0        ;Sys-Font
  1431.     dc.l    SHRTxt
  1432.     dc.l    0
  1433.  
  1434.  
  1435. ;***** GADGET FüR SHIFT LINKS ****************************************
  1436.  
  1437. Gadget7:
  1438.     dc.l    0        ;noch eins
  1439.     dc.w    2,10        ;x,y
  1440.     dc.w    11,9        ;breit,hoch
  1441.     dc.w    GADGHCOMP    ;flags
  1442.     dc.w    RELVERIFY    ;Aktivierung
  1443.     dc.w    BOOLGADGET    ;Typ
  1444.     dc.l    0        ;^Border-Strukt.
  1445.     dc.l    0
  1446.     dc.l    Gadtext7    ;^Text-Strukt.
  1447.     dc.l    0,0
  1448.     dc.w    7        ;ID
  1449.     dc.l    0
  1450. GadText7:
  1451.     dc.b    1,0        ;Pens
  1452.     dc.b    RP_JAM2,0
  1453.     dc.w    2,1        ;x,y
  1454.     dc.l    0        ;Sys-Font
  1455.     dc.l    SHLTxt
  1456.     dc.l    0
  1457.  
  1458.  
  1459.  
  1460.  
  1461. ;***** MENUE - STRUKTUREN ********************************************
  1462.  
  1463. My_Menu:
  1464.     dc.l 0            ;Nächstes Menu
  1465.     dc.w 20,0        ;x,y Position
  1466.     dc.w 110,10        ;Breite, Höhe
  1467.     dc.w 1            ;Wählbar
  1468.     dc.l M1_Title        ;Menuetitle
  1469.     dc.l Item1        ;Einträge
  1470.     dc.w 0,0,0,0        ;Für Intuition
  1471.  
  1472. Item1:
  1473.     dc.l 0            ;Nächstes Item
  1474.     dc.w 0,3        ;x,y Position
  1475.     dc.w 110,10        ;Breite, Höhe
  1476. I1_Check:
  1477.     dc.w %101011011     ;Flag
  1478.     dc.l 0            ;Ausschluß
  1479.     dc.l Item1_ITxt     ;Textstruktur
  1480.     dc.l 0            ;Kein Image
  1481.     dc.b 0            ;Keine Tastenkombination
  1482.     cnop 2
  1483.     dc.l 0            ;Subitem
  1484.     dc.l 0
  1485.  
  1486. Item1_ITxt:
  1487.     dc.b    2,1        ;Pens
  1488.     dc.b    RP_JAM2,0
  1489.     dc.w    20,1        ;x,y
  1490.     dc.l    0        ;Sys-Font
  1491.     dc.l    Item1_Txt
  1492.     dc.l    0
  1493.  
  1494.  
  1495.