home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 3 / CD_Magazyn_EXEC_nr_3.iso / Recent / biz / swood / FW_AllInOne.lha / Makros / Fu゚noten.long < prev    next >
Text File  |  1998-01-17  |  29KB  |  1,125 lines

  1. /* ------------------------------------------------ */
  2. /* Final Writer Arexx Macro - Fußnoten-Verwaltung   */
  3. /* 0.97beta 09.01.98 */
  4.  
  5. Parse ARG FW
  6.  
  7. if ~show('L',"rexxreqtools.library") then
  8.    if ~addlib('rexxreqtools.library',0,-30,0) then do
  9.       ShowMessage 1 1 '"Fehler...." "Benötige Libs:rexxreqtools.library" " A B B R U C H ! !" "Okay" "" ""'
  10.       exit
  11.    end
  12.  
  13. IF ~show('L','tritonrexx.library') then
  14.    IF ~ADDLIB('tritonrexx.library',10,-30,0) THEN DO
  15.       ShowMessage 2 1 '"Fehler...." "Benötige Libs:tritonrexx.library" "" "Abbruch" "" ""'
  16.       exit
  17.    END
  18.  
  19. R='0A'X
  20. SIGNAL ON SYNTAX
  21.  
  22. If FW='' then do
  23.    Address='FinalW'
  24.    Options results
  25.  
  26.    STATUS PORTNAME
  27.    FW = result
  28. End
  29. address(FW)
  30.  
  31. CtrlUp
  32. ShiftUp
  33. AltUp
  34.  
  35. GetSectionList "¤"
  36. IF Pos("FN¤", Result)=0 THEN Disi=1
  37.    Else Disi=0
  38.  
  39. address "REXX"
  40. If open('Hilfe',"S:FW_Paket.prefs","R") then do
  41.    HilfeVerz=readln('Hilfe')
  42.    Call Close('Hilfe')
  43. End
  44. else HilfeVerz=''
  45.  
  46. wie.0=2
  47. wie.1="seitenweise"
  48. wie.2="durchgehend"
  49.  
  50. speed.0=2
  51. speed.1="normal"
  52. speed.2="schnell"
  53.  
  54. If ~exists("s:FW_Fussnote.prefs") then do
  55.    wie=1             /*Art der Numerierung*/
  56.    fo="SoftSans"     /*Schriftart*/
  57.    si="12"           /*schriftgröße*/
  58.    ausgabe="%F)"
  59.    Linie=1.5
  60.  
  61.    GetDocItemPrefs Decimal
  62.    Punkt=Result
  63.    If Punkt="Comma" then DocItemPrefs DECIMAL Period
  64.  
  65.    GetDocItemPrefs Tabs
  66.    Einzug=result
  67.    SText=0
  68.    speed=1
  69. end
  70. else do
  71.    Call Open("prefs","S:FW_Fussnote.prefs","R")
  72.       wie=Readln('prefs')
  73.       fo=Readln('prefs')
  74.       si=Readln('prefs')
  75.       ausgabe=Readln('prefs')
  76.       Linie=Readln('prefs')
  77.       Einzug=Readln('prefs')
  78.       SText=ReadLn('prefs')
  79.       speed=ReadLn('prefs')
  80.    Call Close("prefs")
  81. end
  82.  
  83. pos = max(index(fo,':'),lastpos('/',fo))
  84. If pos~=0 then fond=Delstr(fo,1,pos) 
  85.    else fond=fo
  86. If SText=1 then fond="Cursorposition"
  87. o1="Schrift: "||fond||", Größe: "||si
  88. o2="Numerierung: "||wie.wie||", Ausgabe: "||ausgabe
  89. o3="Linie: "||Linie||" cm, Einzug: "||Einzug||" cm"
  90. o4="Geschwindigkeit: "||speed.speed
  91.  
  92. oldfond=fond; oldfo=fo
  93. oldspeed=speed; oldwie=wie; oldSText=SText
  94.  
  95. apptags = 'TRCA_Name     Fußnote',
  96.           'TRCA_LongName "Fußnote"',
  97.           'TRCA_Info     "für FinalWriter"',
  98.           'TRCA_Version  "1.0 registered"',
  99.           'TRCA_Release  "1"',
  100.           'TRCA_Date     "09.01.98"',
  101.           'TAG_END'
  102.  
  103. /*******************************************************************************
  104. ** Aufbau der GUI
  105. *******************************************************************************/
  106.  
  107. windowtags = WindowID(1),
  108.              WindowPosition('TRWP_CENTERDISPLAY'),
  109.              WindowFlags('TRWF_NOMINTEXTWIDTH'),
  110.              PubScreenName('FinalWriterPubScreen'),
  111.              WindowTitle("Fußnotenverwaltung"),
  112.              BeginMenu('Projekt'),
  113.                 MenuItem('Voreinsteller...',102),
  114.                 'ItemBarlabel',
  115.                 MenuItem('Q_Verlassen',104),
  116.              BeginMenu('?'),
  117.                 MenuItem('?_Info',101),
  118.                 MenuItem('H_Hilfe',103),
  119.              'VertGroupAC SpaceS',
  120.                 'HorizGroupAC SpaceS',
  121.                    'VertGroupAC SpaceS',
  122.                       Button('Fußnote _setzen',1),
  123.                       'SpaceS',
  124.                       TextN('Fußnotentext:'),
  125.                       StringGadget("",9) 'TRAT_DISABLED 1 TRAT_VALUE 999',
  126.                       'Space',
  127.                       Button('Fußnote _löschen',2) 'TRAT_Disabled' Disi,
  128.                       'SpaceS',
  129.                       Button('Fußnoten _erstellen',3) 'TRAT_Disabled' Disi,
  130.                       'SpaceS',
  131.                       'HorizSeparator',
  132.                       'SpaceS',
  133.                       TextH(o1) 'TRAT_ID 5',
  134.                       TextH(o2) 'TRAT_ID 6',
  135.                       TextH(o3) 'TRAT_ID 7',
  136.                       TextH(o4) 'TRAT_ID 8',
  137.                       'SpaceS',
  138.                    'EndGroup SpaceS',
  139.                 'EndGroup SpaceS',
  140.              'EndGroup SpaceS',
  141.           'EndProject'
  142.  
  143. app = TR_CREATEAPP('TRCA_Name Fußnote')
  144.  
  145. /*******************************************************************************
  146. ** Abfrage der GUI
  147. *******************************************************************************/
  148.  
  149. IF app ~= '00000000'x THEN DO
  150.    window1 = TR_OPENPROJECT(app,windowtags)
  151.    IF window1 ~= '00000000'x THEN DO
  152.       ende = 0
  153.  
  154.       DO WHILE ~ende
  155.          CALL TR_WAIT(app,'')
  156.  
  157.          DO WHILE TR_HANDLEMSG(app,'event')
  158.             IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN ende=1
  159.  
  160.             IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
  161.                SELECT
  162.                   WHEN event.trm_id = 9 THEN Do
  163.                      FNText = TR_GETATTRIBUTE(window1,9,'TROB_String')
  164.                      FNText = FNText||" "
  165.                      If FNText~="" then Call FNsetzen
  166.                      Call TR_SETATTRIBUTE(window1,9,'TRAT_DISABLED',1)
  167.                      Call TR_SETATTRIBUTE(window1,1,'TRAT_DISABLED',0)
  168.                      Call TR_SETATTRIBUTE(window1,2,'TRAT_DISABLED',Disi)
  169.                      Call TR_SETATTRIBUTE(window1,3,'TRAT_DISABLED',Disi)
  170.                   END
  171.  
  172.                   OTHERWISE NOP
  173.                END
  174.             END
  175.  
  176.             IF event.trm_class = 'TRMS_ACTION' THEN DO
  177.                SELECT
  178.                   WHEN event.trm_id = 1 THEN Do                /*setzen*/
  179.                      Call TR_SETATTRIBUTE(window1,9,'TRAT_DISABLED',0)
  180.                      Call TR_SETATTRIBUTE(window1,1,'TRAT_DISABLED',1)
  181.                      Call TR_SendMessage(window1,9,'TROM_ACTIVATE',0)
  182.                   END
  183.  
  184.                   WHEN event.trm_id = 2 THEN Call FNloeschen   /*löschen*/
  185.  
  186.                   WHEN event.trm_id = 3 THEN Call FNerstellen  /*erstellen*/
  187.  
  188.                   WHEN event.trm_id = 101 THEN Call rtezrequest("Aus dem Makro-Paket:"||R||R||"Fußnotenverwaltung V1.0 für FW"||R||"© 1998 Heiko Schröder","Danke für Ihre Registrierung.","Info","rt_pubscrname=FinalWriterPubScreen")
  189.                   WHEN event.trm_id = 102 THEN Call Voreinstellung
  190.                   WHEN event.trm_id = 103 THEN address command "run Multiview PUBSCREEN=FinalWriterPubScreen "||d2c(34)||HilfeVerz||"Fußnoten.guide"||d2c(34)
  191.                   WHEN event.trm_id = 104 THEN ende=1
  192.  
  193.                   OTHERWISE NOP
  194.                END
  195.                Call TR_SETATTRIBUTE(window1,2,'TRAT_DISABLED',Disi)
  196.                Call TR_SETATTRIBUTE(window1,3,'TRAT_DISABLED',Disi)
  197.             END
  198.          END
  199.       END
  200.       CALL TR_CLOSEPROJECT(window1)
  201.    END
  202.    CALL TR_DELETEAPP(app)
  203. END
  204. ELSE
  205.    CALL quit('Kann das Fenster nicht öffnen',10)
  206.  
  207. Call Fini
  208. Exit
  209.  
  210. /*-----------------------------------------------------------*/
  211. FNsetzen:
  212.  
  213. address(FW)
  214. STATUS FileName
  215. xyz=Result
  216. IF POS(".FNote",Result)~=0 THEN DO
  217.    ShowMessage 1 1 '"Hier kann ich keine Fußnoten mehr erstellen!"
  218.    "Bitte benutzen Sie die Datei ohne die Endung: .FNOTE"
  219.    ""
  220.    "Klick" "" ""'
  221.    Call Fini
  222.    Return
  223. End
  224.  
  225. /* Schauen ob man sich im FN-Abschnitt befindet */
  226. GetSectionSetup Name
  227. Abschnitt=Result
  228. IF Pos("FN¤",Result)~=0 then do
  229.    ShowMessage 1 1 '"In diesem Abschnitt werden keine Fußnoten gesetzt."
  230.    "Hier dürfen Sie überhaupt nichts ändern!!!"
  231.    "Ansonsten können bei der Fußnotenerstellung Fehler auftreten."
  232.    "Klick" "" ""'
  233.    Call Fini
  234.    Return
  235. End
  236.  
  237. STATUS ParaPos
  238. IF Words(Result)=4 THEN DO
  239.    ShowMessage 1 1 '"Leider ist Text markiert!"
  240.    "Bitte stellen Sie den Cursor hinter das betreffende Wort." ""
  241.    "Ach ja" "" ""'
  242.    Call Fini
  243.    Return
  244. END
  245.  
  246. Do ForEver
  247.    Cursor Left
  248.    Extract
  249.    IF Result~=" " THEN LEAVE
  250. END
  251. Cursor Right
  252. STATUS ParaPos
  253. pos=Result
  254.  
  255. Cursor Right
  256.  
  257. GetSectionList "¤"
  258. IF Pos("FN¤"||Abschnitt, Result)=0 THEN DO
  259.    Disi=0
  260.    NewSection Text Name "FN¤"||Abschnitt
  261.  
  262.    SectionSetup Top 0 Bottom 0 Inside 2 Outside 0
  263.    SectionSetup Header 2.4
  264.  
  265.    EditRightMaster
  266.    FontSize 18
  267.    Style UnderLine
  268.    Type "Fußnoten für den Abschnitt: "||Abschnitt||"."
  269.    Style Normal; NewParagraph
  270.    Type "Bitte NICHTS verändern!!!"
  271.  
  272.    EditBody
  273.    SetTab "2" Left
  274.    LeftMargin "2"
  275.    TYPE "¤"
  276. END
  277. ELSE GoToSection "FN¤"||Abschnitt
  278.  
  279. AltDown;CtrlDown
  280. cursor down           /* ganz runter */
  281. CtrlUp;AltUp
  282.  
  283. cursor Left
  284.  
  285. STATUS ParaPos
  286. Line=Word(result,1)
  287. If Line>1 then do
  288.    Cursor Up            /* und eine Zeile wieder rauf */
  289.  
  290.    EXTRACT
  291.    DO WHILE RESULT~="¤"  /*Stelle der letzten FN-Zahl suchen*/
  292.       Line=Line-1
  293.       If Line<1 then Leave
  294.       MoveToPara Line 0
  295.       Extract
  296.    END
  297.    Cursor Right
  298.  
  299.    Nummer=0
  300.    Extract
  301.    DO WHILE ((RESULT<":")&(RESULT>"/"))  /*Auslesen der letzten FN-Zahl*/
  302.       Nummer=Nummer*10+Result
  303.       cursor Right
  304.       Extract
  305.    END
  306. End
  307. Else Nummer=0
  308.  
  309. Nummer=Nummer+1
  310.  
  311. AltDown;CtrlDown
  312. cursor down           /* ganz runter */
  313. CtrlUp;AltUp
  314.  
  315. IF Nummer<10 THEN TYPE 0||Nummer
  316.    ELSE TYPE Nummer
  317. TYPE X2C(09)||FNText; NewParagraph
  318. TYPE "¤"
  319.  
  320. cursor Up
  321. AltDown;CtrlDown
  322. cursor Right
  323. CtrlUp;AltUp
  324.  
  325. GoToSection Abschnitt
  326. MoveToPara Word(pos,1) Word(pos,2)
  327. Position SuperScript
  328.  
  329. Type "¤"
  330.  
  331. IF Nummer<10 THEN TYPE "0"||Nummer
  332.    ELSE TYPE Nummer
  333.  
  334. Position Normal
  335. EXTRACT
  336. next=result
  337. IF (next~=" " & next~=d2c(9) & next~=x2c(0A)) THEN
  338.    IF Pos(next,". , "" )")=0 THEN TYPE " "
  339.    ELSE NOP
  340. IF (next=" " | next=d2c(9)) then Cursor Right
  341.  
  342. Nummer=0
  343. Return
  344.  
  345. /*-----------------------------------------------------------*/
  346. FNloeschen:
  347.  
  348. address(FW)
  349. STATUS Filename
  350. IF POS(".FNote",Result)~=0 THEN DO
  351.    ShowMessage 1 1 '"Hier kann ich keine Fußnoten löschen!"
  352.    "Bitte benutzen Sie die Datei ohne die Endung: .FNOTE"
  353.    ""
  354.    "Klick" "" ""'
  355.    Return
  356. End
  357.  
  358. GetSectionSetup Name
  359. Abschnitt=Result
  360.  
  361. STATUS ParaPos
  362. pos=result
  363.  
  364. /* falscher Abschnitt oder nichts markiert */
  365. IF (Pos("FN¤",Abschnitt)=0 & Words(pos)=2) THEN DO
  366.    ShowMessage 2 1 '"Um eine Fußnote zu löschen, muß diese markiert sein."
  367.    "Oder möchten Sie ALLE Fußnoten dieses Abschnitts LÖSCHEN?" ""
  368.    "Ja" "Nein" ""'
  369.    If result=2 then Return
  370.    Else Do
  371.       ShowMessage 2 1 '"Sollen wirklich ALLE Fußnoten" 
  372.       "in diesem Abschnitt gelöscht werden?"
  373.       ""
  374.       "Ja" "Nein" ""'
  375.       If result=2 then Return
  376.       Else Do
  377.          GetSectionSetup Name
  378.          RemoveSection "FN¤"||result FORCE
  379.          MoveToLine 1 0
  380.          SetFind WRAP NO
  381.          FIND "¤"  /* Dummy um Fenster zu öffnen */
  382.          Do ForEver
  383.             Find "¤"
  384.             If RC~=0 then Break        /*leave*/
  385.             Delete
  386.  
  387.             ShiftDown
  388.  
  389.             EXTRACT
  390.             DO WHILE ((RESULT<":")&(RESULT>"/"))  /*Auslesen der FN-Zahl*/
  391.                Cursor Right
  392.                Delete
  393.                Extract
  394.             END
  395.             ShiftUp
  396.          END
  397.          ShowMessage 1 1 '"Alle Fußnoten dieses Abschnitts wurden gelöscht!"
  398.          "Bitte schließen Sie das Fenster: Suchen"
  399.          ""
  400.          "Klick" "" ""'
  401.          Return
  402.       End
  403.    End
  404. END
  405.  
  406. /* kein ¤ vorhanden, also keine FNKennung */
  407. Extract
  408. If pos("¤",result)=0 then do
  409.    ShowMessage 1 1 '"Dies ist keine Fußnote!" 
  410.    ""
  411.    ""
  412.    "Klick" "" ""'
  413.    Return
  414. END
  415.  
  416. MoveToPara Word(Pos,1) Word(Pos,2)+1
  417. Nummer=0
  418. EXTRACT
  419. DO WHILE ((RESULT<":")&(RESULT>"/"))  /*Auslesen der FN-Zahl*/
  420.    Nummer=Nummer*10+Result
  421.    Cursor Right
  422.    Extract
  423. END
  424. MoveToPara Word(Pos,1) Word(Pos,2)
  425. ShiftDown
  426. MoveToPara Word(Pos,3) Word(Pos,4)
  427. ShiftUp
  428. If Nummer=0 then do
  429.    ShowMessage 1 1 '"Diese Fußnote existiert nicht mehr!" 
  430.    "Somit kann nichts gelöscht werden."
  431.    ""
  432.    "Klick" "" ""'
  433.    Return
  434. END
  435.  
  436. If Nummer<10 then Nummer="0"||Nummer
  437.  
  438. ShowMessage 1 1 '"Die Fußnote ¤'Nummer' wird jetzt gelöscht!"
  439. ""
  440. "Sind Sie sich sicher?"
  441. "Ja" "Abbrechen" ""'
  442. IF Result=2 then do
  443.    Call Fini
  444.    Return
  445. End
  446. else Delete
  447.  
  448. GotoSection "FN¤"||Abschnitt
  449. SetFind WRAP NO
  450. FIND
  451.  
  452. MoveToPara 1 0
  453.  
  454. FIND ("¤"Nummer)
  455. STATUS ParaPos
  456. Pos=word(result,1) word(result,2)
  457. AltDown
  458. DO WHILE RESULT~="¤"
  459.    Cursor Down
  460.    Extract
  461. END
  462. AltUp;ShiftDown
  463. MoveToPara Pos
  464. ShiftUp
  465.  
  466. Delete
  467. CtrlDown;AltDown;Cursor Down; AltUp;CtrlUp
  468. STATUS ParaPos
  469. If Result = "1 1" then RemoveSection "FN¤"||Abschnitt FORCE
  470.  
  471. GetSectionList "¤"
  472. IF Pos("FN¤", Result)=0 THEN Disi=1
  473.  
  474. GotoSection Abschnitt
  475.    ShowMessage 1 1 '"Die Fußnote wurde gelöscht!"
  476.    "Bitte schließen Sie das Fenster: Suchen"
  477.    ""
  478.    "Klick" "" ""'
  479.  
  480. Return
  481.  
  482. /*-----------------------------------------------------------*/
  483. FNerstellen:
  484. /* Format: Ausgabe auswerten */
  485.  
  486. address(FW)
  487. a=pos("%F",ausgabe)
  488. If a=0 then do
  489.    ShowMessage 1 1 '"Die Ausgabe: 'ausgabe' ist nicht korrekt."
  490.    "Es fehlt die Nummernkennung: %F"
  491.    "Bitte schauen Sie noch einmal in die Hilfe."
  492.    "Ende" "" ""'
  493.    CALL Fini
  494.    Return
  495. End
  496. else do
  497.    ausgabe1=Left(ausgabe,a-1)
  498.    ausgabe2=Right(ausgabe,Length(ausgabe)-a-1)
  499. end
  500.  
  501. STATUS View
  502. Zoom=result
  503.  
  504. STATUS LinePos
  505. Zurueck=result
  506.  
  507. STATUS FileName
  508. IF POS(".FNote",Result)=0 THEN DO
  509.  
  510.    ShowMessage 1 1 '"Die Datei wird jetzt abgespeichert!"
  511.    "Es wird eine neue Datei mit dem Zusatz .FNote erstellt!"
  512.    "Nur in dieser werden die Fußnoten unten auf die Seiten geschrieben."
  513.    "Weiter" "Abbrechen" ""'
  514.    IF Result=2 THEN do
  515.       CALL Fini
  516.       Return
  517.    End
  518.  
  519.    SAVE
  520.    STATUS PathName
  521.    DokName=result
  522. END
  523. Else do
  524.    ShowMessage 1 1 '"Die Fußnoten sind schon erstellt worden!"
  525.    "Bitte benutzen Sie die Datei ohne die Endung: .FNOTE"
  526.    ""
  527.    "Klick" "" ""'
  528.    Return
  529. End
  530.  
  531. Numerierung=wie     /*1,2= g,i*/
  532.  
  533. GetSectionList "ð"
  534. Liste=result
  535.  
  536. Anz=0
  537. temp=Liste
  538. Do ForEver                    /* alle Abschnitte aussuchen */
  539.    a=pos("ð",temp)
  540.  
  541.    If a~=0 then FNTemp=Delstr(temp,a)
  542.       else FNTemp=temp
  543.  
  544.    If pos("FN¤",FNTemp)=0 then do
  545.       Anz=Anz+1
  546.       Abschnitte.Anz=FNTemp
  547.    End
  548.  
  549.    If a=0 then Break
  550.    temp=Right(temp,Length(temp)-a)
  551. End
  552. Abschnitte.0=Anz
  553.  
  554. If speed=2 then Call AnfView
  555.  
  556. AnzTemp=0
  557. Do i=1 to Anz                    /* zugehörige FNAbschnitte raussuchen */
  558.    a=pos("FN¤"Abschnitte.i,Liste)
  559.  
  560.    If a~=0 then do
  561.       AnzTemp=AnzTemp+1
  562.       FNAbschnitt.AnzTemp="FN¤"Abschnitte.i
  563.       Abschnitt.AnzTemp  =Abschnitte.i
  564.    End
  565. End
  566. FNAbschnitt.0=AnzTemp; Abschnitt.0=AnzTemp; Abschnitte.0=0
  567.  
  568. SetFind WRAP NO
  569. FIND "¤"  /* Dummy um Fenster zu öffnen */
  570.  
  571. LinePrefs TextFlow None LineWt .5 LineColor Schwarz
  572. FramePrefs TextFlow Right FlowDist 0.1 LineWt None Fill Transparent
  573. SVA=0
  574.  
  575. Do h=1 to FNAbschnitt.0          /* neu */
  576.  
  577.    g=0
  578.    CtrlUp; AltUp; ShiftUp
  579.  
  580. /*----- im HauptAbschnitt die Menge und Reihenfolge der FN's auslesen -----*/
  581.  
  582.    GotoSection Abschnitt.h
  583.  
  584.    GetPageSetup Height
  585.    DokHoehe=result
  586.    GetSectionSetup Top Bottom Header Footer
  587.    DS=result
  588.    DokHoehe=DokHoehe-Word(DS,1)-Word(DS,2)-Word(DS,3)-Word(DS,4)
  589.  
  590.    MoveToLine 1 0
  591.  
  592.    i=0
  593.    DO ForEver
  594.       Find "¤"
  595.       If RC~=0 then Break        /*leave*/
  596.  
  597.       i=i+1
  598.       Cursor Right
  599.       FNote.i=0
  600.  
  601.       EXTRACT
  602.       DO WHILE ((RESULT<":")&(RESULT>"/"))  /*Auslesen der FN-Zahl*/
  603.          FNote.i=FNote.i*10+Result
  604.          Cursor Right
  605.          Extract
  606.       END
  607.       IF FNote.i=0 THEN i=i-1
  608.    END
  609.  
  610.    IF i=0 THEN DO
  611.       ShowMessage 1 1 '"In diesem Abschnitt gibt es keine Fußnoten!"
  612.       "Bitte gehe in den nächsten oder übernächsten oder ..."
  613.       "Und schließen Sie bitte das Fenster: Suchen"
  614.       "Klick" "" ""'
  615.       Call Fini
  616.       Return
  617.    END
  618.  
  619.    FNote.0=i
  620.  
  621. /*---------------------------Fußnote---------------------------*/
  622.  
  623.    GoToSection FNAbschnitt.h
  624.    TextTool
  625.  
  626.    DO i=1 TO FNote.0
  627.       MoveToLine 1 0
  628.  
  629.       OK=0
  630.       DO ForEver              /* FNoten suchen */
  631.          IF FNote.i<10 THEN FIND ("¤0"FNote.i)
  632.             ELSE FIND ("¤"FNote.i)
  633.  
  634.          STATUS LinePos
  635.          pos=Result
  636.  
  637.          IF Words(pos)=2 THEN LEAVE
  638.          MoveToLine Word(pos,3) Word(pos,4)
  639.          Extract
  640.          IF ((RESULT<0)|(RESULT>9)) THEN Break  /*Leave*/
  641.       END
  642.  
  643.       CtrlDown
  644.       DO WHILE RESULT~="¤"
  645.          Cursor Down
  646.          Extract
  647.       END
  648.       CtrlUp
  649.       Cursor Left
  650.  
  651.       ShiftDown
  652.       MoveToLine Word(pos,3) Word(pos,4)
  653.       ShiftUp
  654.  
  655.       Extract
  656.       VText.i=Result
  657.  
  658.    END
  659.  
  660.    STATUS FontCase
  661.    SCase=result
  662.  
  663. /*----------------------Hauptabschnitt---------------------------*/
  664.  
  665.  
  666.    address(FW)
  667.    GoToSection Abschnitt.h
  668.  
  669.    i=1; Frame=false
  670.    FNPos=1 0
  671.    MoveToLine 1 0
  672.    Merke_i=0
  673.  
  674.    DO WHILE i<= FNote.0
  675.       MoveToLine Word(FNPos,1) Word(FNPos,2)
  676.  
  677.       /* Fußnote auf einer Seite finden */
  678.  
  679.       IF FNote.i<10 THEN FIND ("¤0"FNote.i)
  680.          ELSE FIND ("¤"FNote.i)
  681.       If RC~=0 then Break
  682.  
  683.       STATUS LinePos
  684.       FNPos=Result               /* Position der FN */
  685.       STATUS Page "Insert"
  686.       FNSeite=RESULT             /* Seite der FN */
  687.  
  688.       If (FNSeite~=MerkeSeite & Frame=true & Merke_i~=i-1) then do   /* Line setzen*/
  689.          GraphicTool
  690.          DrawLine MerkeSeite-SVA LRand oben LRand+Linie oben
  691.          Lock
  692.          neu=0
  693.       End
  694.  
  695.       If (FNSeite~=MerkeSeite & Frame=true) then do   /* Textrahmen "locken"*/
  696.          SelectObject ObjectID
  697.          Lock
  698.          Frame=false
  699.          Merke_i=i
  700.  
  701.          If Numerierung=1 then g=i-1
  702.       End
  703.  
  704.       IF Frame=false THEN DO /* Fußnoten sind nicht alle auf nächste Seite geschoben */
  705.  
  706.          GetSectionSetup Inside OutSide
  707.          Parse Var result LRand RRand
  708.  
  709.          GetPageSetup Width
  710.          weite=result-LRand-RRand
  711.  
  712.          NewFrame FNSeite-SVA LRand DokHoehe weite
  713.          Frame=true
  714.          neu=1
  715.  
  716.          Call Einsetzen
  717.  
  718.          Name="FN-Seite"||FNSeite-SVA
  719.          SetObjectTitle ObjectID Name
  720.       End
  721.  
  722.       Else Do
  723.          GraphicTool
  724.          SelectObject ObjectID
  725.  
  726.          MakeFrameActive
  727.          Call Einsetzen
  728.       End
  729.  
  730.       MerkeSeite=FNSeite
  731.       i=i+1
  732.    End
  733.    GraphicTool
  734.    DrawLine FNSeite-SVA LRand oben LRand+Linie oben
  735.    Lock
  736.  
  737.    STATUS Pages          /* ACHTUNG: Seiten des vorigen Abschnitts berücksichtigen */
  738.    SVA=SVA+result /* SeitenVorigerAbschnitte*/
  739.  
  740.    RemoveSection FNAbschnitt.h FORCE
  741.  
  742. End
  743.  
  744. If Punkt="Comma" then DocItemPrefs DECIMAL Comma
  745.  
  746. MoveToLine Zurueck
  747.  
  748. If speed=2 then Call EndView
  749.  
  750. SAVE DokName".FNote"
  751.  
  752. ShowMessage 1 1 '"Die Fußnoten wurden erstellt."
  753. "Bitte schließen Sie das Fenster: Suchen"
  754. ""
  755. "Klick" "" ""'
  756.  
  757. ShowMessage 1 1 '"Sollten Sie an diesem Dokument weiterarbeiten wollen"
  758. "oder möchten Sie Fußnoten bearbeiten, so benutzen Sie bitte"
  759. "die Datei ohne die Endung: .FNOTE"
  760. "Klick" "" ""'
  761.  
  762. Disi=1
  763. Return
  764.  
  765. Einsetzen:
  766.    NewParagraph
  767.  
  768.    STATUS LinePos
  769.    FrameAnfPos=Result
  770.  
  771.    FONT fo
  772.    FontSize si
  773.  
  774.    Case Normal
  775.    Position SuperScript
  776.    Select
  777.       When Numerierung=1 then TYPE ausgabe1||i-g||ausgabe2
  778.       When Numerierung=2 then TYPE ausgabe1||i||ausgabe2
  779.       Otherwise Nop
  780.    End
  781.  
  782.    Position Normal
  783. /*   Case SCase*/
  784.  
  785.    If neu=1 then do
  786.       SetTab Einzug Left
  787.       LeftMargin Einzug
  788.    End
  789.    Type VText.i
  790.    BackSpace
  791.  
  792.    STATUS LinePos
  793.    FrameEndPos=Result
  794.  
  795.    Call Check
  796.  
  797.    If Saite~=FNSeite then do    /* FN rutschte auf Next Seite */
  798.  
  799.       GraphicTool
  800.       SelectObject ObjectID
  801.       MakeFrameActive
  802.  
  803.       MoveToLine FrameAnfPos     /* eingefügtes löschen */
  804.       ShiftDown
  805.       MoveToLine FrameEndPos
  806.       ShiftUp
  807.       BackSpace; BackSpace
  808.  
  809.       Do ForEver
  810.          MoveToLine 1 0             /* Leere Zeilen schreiben */
  811.          NewParagraph
  812.          Call Check
  813.  
  814.          If Saite~=FNSeite then Break
  815.  
  816.          GraphicTool
  817.          SelectObject ObjectID
  818.          MakeFrameActive
  819.       End
  820.  
  821.       oben=MerkeHoehe
  822.       i=i-1
  823.    End
  824.  
  825.    TextTool
  826.  
  827.    If Saite=FNSeite then do    /* FN bleibt auf Seite */
  828.       MoveToLine Word(FNPos,1) Word(FNPos,2)
  829.       ShiftDown
  830.       MoveToLine Word(FNPos,3) Word(FNPos,4)
  831.       ShiftUp
  832.  
  833.       Delete                  /* sonst keine hochgestellten Zeichen */
  834.       Position SuperScript
  835.       Select
  836.          When Numerierung=1 then TYPE ausgabe1||i-g||ausgabe2
  837.          When Numerierung=2 then TYPE ausgabe1||i||ausgabe2
  838.          Otherwise Nop
  839.       End
  840.    End
  841.    GraphicTool
  842.    MerkeHoehe=oben
  843. Return
  844.  
  845. Check:
  846.    GraphicTool
  847.    CurrentObject
  848.    ObjectID = Result
  849.  
  850.    GetObjectCoords ObjectID
  851.    Parse var result . . . . frhoehe
  852.  
  853.    oben=DokHoehe+Word(DS,1)+Word(DS,3)-frhoehe
  854.  
  855.    SelectObject ObjectID
  856.    SetObjectCoords 0 FNSeite-SVA LRand oben weite frhoehe
  857.  
  858.    TextTool
  859.    MoveToLine Word(FNPos,3) Word(FNPos,4)
  860.    STATUS Page "Insert"
  861.    Saite=Result
  862. Return
  863.  
  864. /*-----------------------------------------------------------*/
  865.  
  866. Voreinstellung:
  867.  
  868. windowtags = WindowID(2),
  869.              WindowPosition('TRWP_CENTERDISPLAY'),
  870.              WindowFlags('TRWF_NOMINTEXTWIDTH'),
  871.              PubScreenName('FinalWriterPubScreen'),
  872.              WindowTitle('Fußnoten-Voreinsteller'),
  873.              'HorizGroupAC SpaceS',
  874.                 'VertGroupA SpaceS',
  875.                    'HorizGroupAC',
  876.                       TextID('Art der _Numerierung:',4),
  877.                       'SpaceS',
  878.                       CycleGadget('wie',wie-1,4) 'TRAT_Flags TRCY_RIGHTLABELS',
  879.                    'EndGroup',
  880.                    'HorizGroupAC',
  881.                       TextID('S_chriftart:',5),
  882.                       'SpaceS',
  883.                       CheckBox(2) 'TRAT_Value 'SText,
  884.                       GetEntryButton(5) 'TRAT_DISABLED 'SText,
  885.                       StringGadget(fond,6) 'TRAT_DISABLED 'SText,
  886.                    'EndGroup',
  887.                    'HorizGroupAC',
  888.                       TextID('Schrift_größe:',7),
  889.                       'SpaceS',
  890.                       StringGadget(si,7),
  891.                       'Space',
  892.                       TextID('A_usgabe:',8),
  893.                       'SpaceS',
  894.                       StringGadget(ausgabe,8),
  895.                    'EndGroup',
  896.                    'HorizGroupAC',
  897.                       TextID('_Linienlänge:',1),
  898.                       'SpaceS',
  899.                       StringGadget(Linie,1),
  900.                       'Space',
  901.                       TextID('_Einzug:',3),
  902.                       'SpaceS',
  903.                       StringGadget(Einzug,3),
  904.                    'EndGroup',
  905.                    'HorizGroupAC',
  906.                       TextID('Gesch_windigkeit:',9),
  907.                       'SpaceS',
  908.                       CycleGadget('speed',speed-1,9) 'TRAT_Flags TRCY_RIGHTLABELS',
  909.                    'EndGroup',
  910.                    'SpaceS',
  911.                    'HorizGroupEC',
  912.                       Button('_Sichern',15),
  913.                       'SpaceS',
  914.                       Button('_Anwenden',10),
  915.                       'SpaceS',
  916.                       Button('Ab_bruch',20),
  917.                    'EndGroup SpaceS',
  918.                 'EndGroup SpaceS',
  919.              'EndGroup SpaceS',
  920.              'EndProject'
  921.    app2 = TR_CREATEAPP('TRCA_Name Fußnote2')
  922. IF app2 ~= '00000000'x THEN DO
  923.    window2 = TR_OPENPROJECT(app2,windowtags)
  924.    IF window2 ~= '00000000'x THEN DO
  925.       ende2 = 0
  926.  
  927.       DO WHILE ~ende2
  928.          CALL TR_WAIT(app2,'')
  929.  
  930.          DO WHILE TR_HANDLEMSG(app2,'event')
  931.             IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN ende2=1
  932.  
  933.             IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
  934.                SELECT
  935.                   WHEN event.trm_id = 2 THEN Do                /*Schrift aus Text*/
  936.                      oldSText=SText
  937.                      SText=event.trm_data
  938.  
  939.                      address(FW)
  940.                      Status FontName
  941.                      oldfo=fo; oldfond=fond
  942.                      fo=result
  943.                      If SText=1 then fond="Cursorposition"
  944.                         else fond=fo
  945.                      Status FontSize
  946.                      si=result
  947.  
  948.                      CALL TR_SETATTRIBUTE(window2,7,'TROB_String',si)
  949.                      CALL TR_SETATTRIBUTE(window2,6,'TROB_String',fond)
  950.                      CALL TR_SETATTRIBUTE(window2,6,'TRAT_DISABLED',event.trm_data)
  951.                      CALL TR_SETATTRIBUTE(window2,5,'TRAT_DISABLED',event.trm_data)
  952.                   END
  953.  
  954.                   WHEN event.trm_id = 4 THEN Do                /*Numerierung*/
  955.                      oldwie=wie
  956.                      wie=event.trm_data+1
  957.                   END
  958.  
  959.                   WHEN event.trm_id = 9 THEN Do                /*BSAusgabe*/
  960.                      oldspeed=speed
  961.                      speed=event.trm_data+1
  962.                   END
  963.  
  964.                   OTHERWISE NOP
  965.                END
  966.             END
  967.  
  968.             IF event.trm_class = 'TRMS_ACTION' THEN DO
  969.                SELECT
  970.                   WHEN event.trm_id = 5 THEN Do                /*Schriftart*/
  971.                      fond=rtfilerequest("FWFonts/SWOLFonts",,"Font auswählen...",,"rt_pubscrname=FinalWriterPubScreen")
  972.                      if fond~='' then do
  973.                         fo=fond
  974.                         pos = max(index(fond,':'),lastpos('/',fond))
  975.                         If pos~=0 then fond=Delstr(fond,1,pos)
  976.                         CALL TR_SETATTRIBUTE(window2,6,'TROB_String',fond)
  977.                      End
  978.                   END
  979.  
  980.  
  981.                   WHEN event.trm_id = 10 THEN Do               /*okay*/
  982.                      Call Auslesen
  983.                      if okay=1 then Call Schreiben
  984.                   END
  985.  
  986.                   WHEN event.trm_id = 15 THEN Do               /*speichern*/
  987.                      Call Auslesen
  988.  
  989.                      If okay=1 then do
  990.                         Call Open("prefs","s:FW_Fussnote.prefs","W")
  991.                         Writeln('prefs',wie)
  992.                         Writeln('prefs',fo)
  993.                         Writeln('prefs',si)
  994.                         Writeln('prefs',ausgabe)
  995.                         Writeln('prefs',Linie)
  996.                         Writeln('prefs',Einzug)
  997.                         Writeln('prefs',SText)
  998.                         Writeln('prefs',speed)
  999.                         Call Close("prefs")
  1000.  
  1001.                         Call Schreiben
  1002.                      End
  1003.                   END
  1004.  
  1005.                   WHEN event.trm_id = 20 THEN Do                /*Abbrechen*/
  1006.                      SText=oldSText; fo=oldfo; fond=oldfond
  1007.                      wie=oldwie; speed=oldspeed
  1008.                      ende2=1
  1009.                   END
  1010.  
  1011.                   OTHERWISE NOP
  1012.                END
  1013.             END
  1014.          END
  1015.       END
  1016.       CALL TR_CLOSEPROJECT(window2)
  1017.    END
  1018.    CALL TR_DELETEAPP(app2)
  1019. END
  1020. ELSE
  1021.    CALL quit('Kann das Fenster nicht öffnen',10)
  1022.  
  1023. Return
  1024.  
  1025. Auslesen:
  1026.    okay=0
  1027.  
  1028.    si = TR_GETATTRIBUTE(window2,7,'TROB_String')
  1029.    If Datatype(si,'W')=0 then do
  1030.       x=rtezrequest("Die SCHRIFTGRÖßE bitte ganzzahlig angeben!","_Achso","Eingabe-Fehler","rt_pubscrname=FinalWriterPubScreen")
  1031.       Call TR_SendMessage(window2,7,'TROM_ACTIVATE',0)
  1032.       return
  1033.    end
  1034.    If si<4 then si=4
  1035.    If si>360 then si=360
  1036.  
  1037.    ausgabe = TR_GETATTRIBUTE(window2,8,'TROB_String')
  1038.  
  1039.    Linie = TR_GETATTRIBUTE(window2,1,'TROB_String')
  1040.    If Datatype(Linie,'N')=0 then do
  1041.       x=rtezrequest("Die LINIENLÄNGE bitte mit (.) angeben!","_Achso","Eingabe-Fehler","rt_pubscrname=FinalWriterPubScreen")
  1042.       Call TR_SendMessage(window2,1,'TROM_ACTIVATE',0)
  1043.       return
  1044.    end
  1045.  
  1046.    Einzug = TR_GETATTRIBUTE(window2,3,'TROB_String')
  1047.    If Datatype(Einzug,'N')=0 then do
  1048.       x=rtezrequest("Den EINZUG bitte mit (.) angeben!","_Achso","Eingabe-Fehler","rt_pubscrname=FinalWriterPubScreen")
  1049.       Call TR_SendMessage(window2,3,'TROM_ACTIVATE',0)
  1050.       return
  1051.    end
  1052.    GetDocItemPrefs Tabs
  1053.    If Einzug<Result then Einzug=Result
  1054.    okay=1
  1055. Return
  1056.  
  1057. Schreiben:
  1058.    o1="Schrift: "||fond||", Größe: "||si
  1059.    o2="Numerierung: "||wie.wie||", Ausgabe: "||ausgabe
  1060.    o3="Linie: "||Linie||" cm, Einzug: "||Einzug||" cm"
  1061.    o4="Geschwindigkeit: "||speed.speed
  1062.    Call TR_SETATTRIBUTE(window1,5,'TRAT_TEXT',o1)
  1063.    Call TR_SETATTRIBUTE(window1,6,'TRAT_TEXT',o2)
  1064.    Call TR_SETATTRIBUTE(window1,7,'TRAT_TEXT',o3)
  1065.    Call TR_SETATTRIBUTE(window1,8,'TRAT_TEXT',o4)
  1066.    ende2=1
  1067. Return
  1068.  
  1069. Fini:
  1070. If Punkt="Comma" then DocItemPrefs DECIMAL Comma
  1071. CtrlUp;ShiftUp;AltUp
  1072.  
  1073. If speed=2 then Call EndView
  1074. Return
  1075.  
  1076. AnfView:
  1077.    GetDisplayPrefs PageTabs SectionTabs   /*Register abschalten */
  1078.    Zungen=result
  1079.    DisplayPrefs PageTabs Off SectionTabs Off
  1080.  
  1081.    STATUS View
  1082.    Zoom=result
  1083.    View 20
  1084. Return
  1085.  
  1086. EndView:
  1087.    View Zoom
  1088.    do i=1 to 1000
  1089.       NOP
  1090.    End
  1091.    DisplayPrefs PageTabs word(Zungen,1) SectionTabs word(Zungen,2)
  1092. Return
  1093.  
  1094. /*******************************************************************************
  1095. ** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird
  1096. *******************************************************************************/
  1097.  
  1098. SYNTAX:
  1099.    CALL quit('Fehler' rc 'in Zeile' sigl '-' ERRORTEXT(rc)||R||SOURCELINE(sigl)||R||'Bitte informieren Sie den Autor...',20)
  1100.  
  1101. /*******************************************************************************
  1102. ** Script beenden
  1103. *******************************************************************************/
  1104.  
  1105. quit:
  1106.    PARSE ARG message,rcode
  1107.  
  1108.    IF app ~= '00000000'x THEN DO
  1109.       IF message ~= '' THEN
  1110.          ret=rtezrequest(message,"_Okay","ACHTUNG!","rt_pubscrname=FinalWriterPubScreen")
  1111.  
  1112.       CALL TR_DELETEAPP(app)
  1113.    END
  1114.    ELSE
  1115.       IF message ~= '' THEN DO
  1116.          SAY message
  1117.          SAY
  1118.          OPTIONS PROMPT 'Bitte <RETURN> drücken'
  1119.          PULL taste
  1120.       END
  1121.  
  1122.    address command "flushtrx all"
  1123.    EXIT(rcode)
  1124.  
  1125.