home *** CD-ROM | disk | FTP | other *** search
Wrap
/* $VER: FinalWrapper 3.1 (21.05.95) by NDY's */ version="3.1" date="21.05.95" OPTIONS RESULTS SIGNAL ON ERROR SIGNAL ON SYNTAX SIGNAL ON BREAK_C ARG cliarg initerr=init() rxport=ADDRESS() IF ~(Left(rxport,Length(finalw))=finalw) THEN DO DO i=1 TO 20 UNTIL portok rxport=finalw||i portok=Show("p",rxport) END IF portok THEN ADDRESS VALUE rxport END portok=Show("p",rxport) CALL locale CALL checkenv CALL loaddef(1) pubonly=~check.mscr IF portok & ~pubonly & fwkey~="" THEN DO SIGNAL OFF ERROR ADDRESS COMMAND ''fwkey'' SIGNAL ON ERROR IF RC=0 THEN pubonly=1 ELSE customscr=D2C(RC,4) END ELSE pubonly=1 IF portok THEN DO GetDocItemPrefs "DECIMAL" deci=Upper(RESULT) DocItemPrefs "DECIMAL PERIOD" CALL options CALL chosenobjs CALL oval CALL scan CALL resetprefs END meas=measure.1 IF portok THEN DO GetDisplayPrefs "MEASURE" RESULT=Upper(RESULT) SELECT WHEN RESULT="INCHES" THEN meas=measure.2 WHEN RESULT="METRIC" THEN meas=measure.3 WHEN RESULT="PICA" THEN meas=measure.4 OTHERWISE NOP END END DO id=agads+1 TO agads+sgads ltxt.id=replacepat(ltxt.id,"@m",meas) END IF guiinit()=5 THEN CALL message(50,nogui) IF test THEN DO DO i=1 TO 5 nr=Word("5 10 20 100 200",i) CALL message(0,replacepat(replacepat(replacepat(replacepat(errtext,"@n",nr),"@l",666),"@t",fwerrtext.nr),"@s","Goto hell")) END CALL message(0,replacepat(nolib,"@y","leng.library")) CALL message(0,nofw) CALL message(0,noselect) CALL message(0,wrongos) CALL message(0,nogui) CALL message(0,nohelp) CALL message(0,noreqtools) CALL message(0,replacepat(notnum,"@g","Age:")) CALL message(0,replacepat(rxcmderr,"@c","BE QUIET")) CALL message(0,about) END init=0 DO FOREVER CALL OnMenu(win,1024) IF ~zoomed THEN CALL ZipWindow(win) CALL ScreenToFront(scr) CALL ActivateWindow(win) CALL SetWindowTitles(win,wintitle,scrtitle) IF Left(text,Min(len.tgad,Length(text)))~=val.tgad THEN text=val.tgad DO UNTIL portok closed=0 DO UNTIL closed~=0 DO UNTIL closed~=0 CALL WaitPkt(portname) CALL messy END DO id=1 TO agads+sgads IF labs.id>0 THEN CALL checkstrgad END IF closed=winclose | closed=okclose & prefsstore THEN CALL savedef(1) IF closed=cancelclose | closed=winclose THEN DO CALL bye(0) closed=0 END IF closed=rxclose THEN DO ADDRESS COMMAND "Run >NIL: Rx "||defdir closed=0 END IF closed=nextclose THEN DO ADDRESS VALUE rxport portok=1 CALL newdoc closed=0 END END closed=0 portok=Show("P",rxport) IF ~portok THEN DO DO i=1 TO 20 UNTIL portok rxport=finalw||i portok=Show("p",rxport) END CALL newdoc END IF ~portok THEN CALL message(0,nofw) ELSE ADDRESS VALUE rxport END zoomed=BitTst(D2C(GETVALUE(win,24,4,"N")),28) IF ~zoomed THEN CALL ZipWindow(win) CALL SetWindowTitles(win,aborttitle,busytitle) ScreenToFront CALL OffMenu(win,1024) GetDocItemPrefs "DECIMAL" deci=Upper(RESULT) DocItemPrefs "DECIMAL PERIOD" CALL options IF chosenobjs()=0 THEN DO CALL oval CALL scan IF closed=0 THEN CALL text IF closed=0 THEN CALL wrap IF closed=0 THEN CALL group CALL updategadgets IF stilltoreply THEN DO CALL Reply(replymsg,0) stilltoreply=0 END END CALL resetprefs END CALL bye(5) init: init=1 errtext="@t (#@n)|in line @l" stdbut="OK" wintitle="" lockcnt=0 errtrap=0 getscrn=0 catalog=0 objs=0 sobjs=0 deci="" et="" cleangui=0 stilltoreply=0 replymsg="00000000"x apig=1 lib.apig=0 reqtools=4 lib.reqtools=0 win="00000000"x defprfs="" defspecs="" defcolour="" deffont="" portname="FinalWrapperPort" IF Show("P",portname) THEN DO ADDRESS VALUE portname IF cliarg~="" THEN INTERPRET cliarg ELSE PopFront CALL bye(0) END fwkey="ENVARC:FinalWrapper/FWKeyfile" libs=5 DO i=1 TO libs lib.i=0 END library.apig="apig.library" library.2="rexxmathlib.library" library.3="rexxsupport.library" library.reqtools="rexxreqtools.library" guidelib=5 library.guidelib="amigaguide.library" DO libn=1 TO libs lib.libn=Show("l",library.libn) IF ~lib.libn THEN lib.libn=AddLib(library.libn,0,-30,0) IF ~lib.libn & libn~=guidelib & libn~=reqtools THEN RETURN 14 END help=lib.guidelib defdir="" temp="" preff.1="" preff.2="" IF xexists("ENV:Workbench") THEN IF Open(prefs,"ENV:Workbench","R") THEN DO wb3=(ReadLn(prefs)>=39) CALL Close(prefs) END ELSE wb3=0 IF xexists("ENV:FinalWrapper") THEN DO preff.1="ENV:FinalWrapper/FinalWrapper.def" temp="ENV:FinalWrapper/FinalWrapper.temp" IF Open(prefs,"ENV:FinalWrapper/FWPath","R") THEN DO defdir=ReadLn(prefs) CALL Close(prefs) END END IF xexists("ENVARC:FinalWrapper") THEN preff.2="ENVARC:FinalWrapper/FinalWrapper.def" finalw="FINALW." libn=libs port=0 oldlen=0 oldtxt=0 oldoval=0 oldobjs=0 oldpara=-1 oldppos=-1 oldplen=-1 txt=0 oval=0 rx=0 ry=0 ovalx="" ovaly="" ovalw="" ovalh="" ovalp="" text="" mchks=0 macts=0 agads=0 sgads=0 tgads=0 wgads=0 slines=0 ovalscanned=0 gadgettext=0 virtualtext=1 alen=0 txtrot=0 windowpos=0 prefsstore=1 trapped=0 specs.0="" font.0="" colour.0="" dirtysize=1 sheetused=0 dirtytext=1 obl="00011111122222233333444445555666677778888999AA" obrot="0006121722273135394245" RETURN 0 locale: return=13 ; esc=27 ; bs=8 ; del=127 test=0 IF xexists("ENV:") THEN ok=Open(prefs,"ENV:Language","R") ELSE ok=0 IF ok THEN DO language=ReadLn(prefs) CALL Close(prefs) END ELSE language="english" IF language="deutsch" THEN DO measure.1="?" measure.2="Zoll" measure.3="cm" measure.4="Pica" docname="FinalWrapperSmallD.Guide" origwintitle="@i - @f" origscrtitle="@i - @f" unnamed="Unbenannt" defwinx=0 defwiny=0 aborttitle="<- Abbrechen" busytitle="@i - Am Arbeiten, bitte warten..." gnode.0="REQUESTER" mnode.0="MENU" stdbut="OK" errtext="FinalWrapper-Fehler:|@t|in Zeile @l:|<@s>|(Fehlernummer @n)" nolib="FinalWrapper-Fehler:|Konnte '@y' nicht öffnen!" nofw="Erst mal Final Writer starten!" noselect="FinalWrapper-Fehler:|Zuerst einen Textblock oder einen|Textausschnitt und ein Objekt|wählen oder die Werte in die|entsprechenden Felder eingeben!" wrongos="FinalWrapper-Fehler:|Es wird mindestens OS2.0 benötigt!" nogui="FinalWrapper-Fehler:|Konnte Requester nicht öffnen!" notnum="@g|Numerischer Wert erforderlich!" noreqtools="Konnte rexxreqtools.library nicht öffnen!" nohelp="Online Help nicht verfügbar!" rxcmderr="Unbekannter Arexx-Befehl|oder Syntaxfehler:|@c" rxfilerq="Arexx-Makro starten:" rxfileok="OK" about="FinalWrapper @v (@d)||Vorschläge & Fehler sind zu richten an:| Andreas Weiss| Dorfstrasse 24| CH-8212 Nohl| (Schweiz)||Dieses Programm ist SHAREWARE!|Die Gebühr beträgt sfr/DM 20 oder $15" arc=newgadget(2,"n",1,360,0,"ARC",0,9999) ltxt.arc.1="Nutze Sektor °: Uhrzeiger" ltxt.arc.2="Nutze Sektor °: Gegenuhrz." beg=newgadget(3,"p",0,0,0,"BEGIN",0,359) ltxt.beg.1="Position °: Absolut" ltxt.beg.2="Position °: Uhrzeigersinn" ltxt.beg.3="Position °: Gegenuhrzeiger" rot=newgadget(7,"r",0,0,0,"ROTATE",0,359) ltxt.rot.1="Rotation °: Absolut" ltxt.rot.2="Rotation °: Wie Textblock" ltxt.rot.3="Rotation °: Uhrzeigersinn" ltxt.rot.4="Rotation °: Gegenuhrzeiger" ltxt.rot.5="Rotation °: Delta Uhrz." ltxt.rot.6="Rotation °: Delta Gegenuhr" ltxt.rot.7="Rotation : Titelmodus" dlt=newgadget(-4,"l",0,0,0,"DELETE") ltxt.dlt.1="Löschen: Nichts" ltxt.dlt.2="Löschen: Nur Oval" ltxt.dlt.3="Löschen: Oval und Textblock" ltxt.dlt.4="Löschen: Oval kopieren" grp=newgadget(-3,"g",0,0,0,"GROUP") ltxt.grp.1="Gruppieren: Nein" ltxt.grp.2="Gruppieren: Ausgewähltes Oval" ltxt.grp.3="Gruppieren: Unsichtbares Oval" wrd=newgadget(-4,"w",0,0,0,"WORDMODE") ltxt.wrd.1="Worte zusammen: Nein" ltxt.wrd.2="Worte zusammen: Zentriert" ltxt.wrd.3="Worte zusammen: Linksbündig" ltxt.wrd.4="Worte zusammen: Rechtsbündig" spl=newgadget(2,"s",0,25,0,"SPIRAL",1,100) ltxt.spl.1="Spirale %: Aussen -> innen" ltxt.spl.2="Spirale %: Innen -> aussen" siz=newgadget(2,"z",0,100,0,"SIZE",1,100) ltxt.siz.1="Zeichengröße %: Sinkend" ltxt.siz.2="Zeichengröße %: Steigend" zoo=newgadget(3,"v",0,50,0,"ZOOM",1,1000) ltxt.zoo.1="Vergrössern %: Alles" ltxt.zoo.2="Vergrössern %: Höhe" ltxt.zoo.3="Vergrössern %: Breite" ink=newgadget(-5,"f",0,0,0,"COLOUR") ltxt.ink.1="Farbe: Wie Text" ltxt.ink.2="Farbe: Wie Ovalfüllung" ltxt.ink.3="Farbe: Wie Ovalrahmen" ltxt.ink.4="Farbe: Schatten Füllfarbe" ltxt.ink.5="Farbe: Schatten Rahmenfarbe" adj=newgadget(-5,"k",0,0,0,"ADJUST") ltxt.adj.1="Korrigiere: Nichts" ltxt.adj.2="Korrigiere: Zeichengrösse" ltxt.adj.3="Korrigiere: Zeichenbreite" ltxt.adj.4="Korrigiere: Scheinbare Breite" ltxt.adj.5="Korrigiere: Sektorgrösse" adjarc=5 pat=newgadget(0,"ü",0,0,0,"PATTERN") ltxt.pat="Übernehme Attribute von Auswahl" xgad=newstr(7,"x",1,"",1,"XPOS") ltxt.xgad="(@m) X:" ygad=newstr(7,"y",1,"",1,"YPOS") ltxt.ygad="Y:" wgad=newstr(7,"b",1,"",1,"WIDTH") ltxt.wgad="Breite:" hgad=newstr(7,"h",1,"",1,"HEIGHT") ltxt.hgad="Höhe:" pgad=newstr(4,"#",1,1,0,"PAGE") ltxt.pgad="# der Seite:" tgad=newstr(200,"t",2,"",2,"TEXT") ltxt.tgad="Text:" okgad=newbutton(" OK ","o",RETURN,"OK") cancelgad=newbutton("Abbruch","a",esc,"CANCEL") closegad=newkey(del,"CLOSE") zipgad=newkey(" ","ZIP") depthgad=newkey(bs,"BACK") mtitle="Einstellungen" mgad=newchkitem("Gadgets aktivieren","G",1,"ACTIVATE") mspl=newchkitem("Korrigiere Sektor für Spiralen","K",1,"IMPROVE") mwin=newchkitem("Requester unter Mauszeiger","R",1,"WINDOW") mscr=newchkitem("Benutze Final Writers Screen","B",1,"SCREEN") mrel=newchkitem("Final Writer Version 3","F",1,"RELEASE") CALL newitem("","",mnode.0) mload=newitem("Laden","L","LOAD") msave=newitem("Sichern","S","SAVE") mres=newitem("Zurücksetzen","Z","RESET") mdef=newitem("Voreinstellungen","V","DEFAULTS") CALL newitem("","",mnode.0) mtext=newitem("Textblock-Einstellungen","T","TEXTPREFS") moval=newitem("Oval-Einstellungen","O","OVALPREFS") CALL newitem("","",mnode.0) mnext=newitem("Nächstes Dokument","N","NEXT") mrexx=newitem("Arexx-Makro starten...","A","MACRO") mhelp=newitem("Hilfe...","H","HELP") mabt=newitem("Über...","?","ABOUT") fwerrtext.5="Befehl schlug fehl" fwerrtext.10="Befehl gescheitert" fwerrtext.20="Ungültige Argumente" fwerrtext.100="Befehl unbekannt" fwerrtext.200="Kann fwarexx.library nicht öffnen" END ELSE IF language="italiano" THEN DO measure.1="?" measure.2="Poll." measure.3="cm" measure.4="Pica" docname="FinalWrapperSmallI.Guide" origwintitle="@i - @f" origscrtitle="@i - @f" unnamed="SenzaNome" defwinx=0 defwiny=0 aborttitle="<- Interrompi" busytitle="@i - Attendi, sto calcolando..." gnode.0="REQUESTER" mnode.0="MENU" stdbut="OK" errtext="FinalWrapper fallito:|@t|alla linea @l:|<@s>|(errornumber @n)" noselect="FinalWrapper fallito:|Prima seleziona un oggetto|e un textblock (o del testo)|oppure inserisci i valori|nelle caselle" nolib="FinalWrapper failed:|Non si può aprire '@y'" nofw="Eseguire prima Final Writer!" wrongos="FinalWrapper fallito:|E' richiesto almeno OS2.0!" nogui="FinalWrapper fallito:|Non si può aprire il requester!" notnum="@g|Occorre un valore numerico!" noreqtools="Rexxreqtools.library non trovata!" nohelp="Help in linea non disponibile!" rxcmderr="Comando Arexx sconosciuto|o errore di sintassi:|@c" rxfilerq="Esecuzione macro Arexx:" rxfileok="OK" about="FinalWrapper @v (@d)||Per consigli e bugs scrivere a:| Andreas Weiss| Dorfstrasse 24| CH-8212 Nohl| (Switzerland)|Il programma è SHAREWARE!|($15 o sfr/DM 20)" arc=newgadget(2,"u",1,360,0,"ARC",0,9999) ltxt.arc.1="Usa arco °: In s.orario" ltxt.arc.2="Usa arco °: In s.antiorar." beg=newgadget(3,"i",0,0,0,"BEGIN",0,359) ltxt.beg.1="Inizio °: In assoluti" ltxt.beg.2="Inizio °: In s.orario" ltxt.beg.3="Inizio °: In s.antiorario" rot=newgadget(7,"r",0,0,0,"ROTATE",0,359) ltxt.rot.1="Ruota °: Angolo fisso" ltxt.rot.2="Ruota °: Come textblock" ltxt.rot.3="Ruota °: In s.orario" ltxt.rot.4="Ruota °: In s.antiorario" ltxt.rot.5="Ruota °: Incremento orar." ltxt.rot.6="Ruota °: Incremento anti." ltxt.rot.7="Ruota °: Modo del titolo" dlt=newgadget(-4,"e",0,0,0,"DELETE") ltxt.dlt.1="Elimina: Niente" ltxt.dlt.2="Elimina: Solo ovale" ltxt.dlt.3="Elimina: Ovale e textblock" ltxt.dlt.4="Elimina: Copia ovale" grp=newgadget(-3,"g",0,0,0,"GROUP") ltxt.grp.1="Gruppo: No" ltxt.grp.2="Gruppo: Ovale selezionato" ltxt.grp.3="Gruppo: Ovale nascosto" wrd=newgadget(-4,"w",0,0,0,"WORDMODE") ltxt.wrd.1="Non piegare le parole: No" ltxt.wrd.2="Non piegare le parole: Centro" ltxt.wrd.3="Non piegare le parole: Sinistra" ltxt.wrd.4="Non piegare le parole: Destra" spl=newgadget(2,"s",0,25,0,"SPIRAL",1,100) ltxt.spl.1="Spirale %: Verso l'interno" ltxt.spl.2="Spirale %: Verso l'esterno" siz=newgadget(2,"d",0,100,0,"SIZE",1,100) ltxt.siz.1="Dim. font %: Decrescente" ltxt.siz.2="Dim. font %: Crescente" zoo=newgadget(3,"z",0,50,0,"ZOOM",1,1000) ltxt.zoo.1="Zoom %: Tutto" ltxt.zoo.2="Zoom %: Altezza" ltxt.zoo.3="Zoom %: Larghezza" ink=newgadget(-5,"c",0,0,0,"COLOUR") ltxt.ink.1="Colore: Del testo" ltxt.ink.2="Colore: Riempimento ovale" ltxt.ink.3="Colore: Bordo dell'ovale" ltxt.ink.4="Colore: Ombra = riempim. ovale" ltxt.ink.5="Colore: Ombra = bordo ovale" adj=newgadget(-5,"m",0,0,0,"ADJUST") ltxt.adj.1="Modella: Niente" ltxt.adj.2="Modella: Dim. caratteri" ltxt.adj.3="Modella: Largh. caratteri" ltxt.adj.4="Modella: Largh. apparente" ltxt.adj.5="Modella: Arco" adjarc=5 pat=newgadget(0,"p",0,0,0,"PATTERN") ltxt.pat="Prendi stile del testo selezionato" xgad=newstr(7,"x",1,"",1,"XPOS") ltxt.xgad="(@m) X:" ygad=newstr(7,"y",1,"",1,"YPOS") ltxt.ygad="Y:" wgad=newstr(7,"l",1,"",1,"WIDTH") ltxt.wgad="Largh:" hgad=newstr(7,"a",1,"",1,"HEIGHT") ltxt.hgad="Alt:" pgad=newstr(4,"#",1,1,0,"PAGE") ltxt.pgad="# di pag.:" tgad=newstr(200,"t",2,"",2,"TEXT") ltxt.tgad="Testo:" okgad=newbutton(" OK ","o",RETURN,"OK") cancelgad=newbutton("Annulla","q",esc,"CANCEL") closegad=newkey(del,"CLOSE") zipgad=newkey(" ","ZIP") depthgad=newkey(bs,"BACK") mtitle="Impostazioni" mgad=newchkitem("Auto-attiva caselle valori","A",1,"ACTIVATE") mspl=newchkitem("Modella Arco per spirali","M",1,"IMPROVE") mwin=newchkitem("Pannello sotto al pointer","P",1,"WINDOW") mscr=newchkitem("Usa schermo di Final Writer","U",1,"SCREEN") mrel=newchkitem("Final Writer Release 3","F",1,"RELEASE") CALL newitem("","",mnode.0) mload=newitem("Carica","C","LOAD") msave=newitem("Salva","S","SAVE") mres=newitem("Ripristina ultime impostazioni","R","RESET") mdef=newitem("Impostazioni predefinite","I","DEFAULTS") CALL newitem("","",mnode.0) mtext=newitem("Text blocks settings","T","TEXTPREFS") moval=newitem("Oval settings","O","OVALPREFS") CALL newitem("","",mnode.0) mnext=newitem("Documento successivo","D","NEXT") mrexx=newitem("Esegui macro Arexx...","E","MACRO") mhelp=newitem("Help...","H","HELP") mabt=newitem("Notizie...","?","ABOUT") fwerrtext.5="Instruction didn't succeed" fwerrtext.10="Istruzione fallita" fwerrtext.20="Argomenti non validi" fwerrtext.100="Istruzione sconosciuta" fwerrtext.200="Couldn't open fwarexx.library" END ELSE DO measure.1="?" measure.2="Inch" measure.3="cm" measure.4="Pica" docname="FinalWrapperSmall.Guide" origwintitle="@i - @f" origscrtitle="@i - @f" unnamed="Unnamed" defwinx=0 defwiny=0 aborttitle="<- Abort" busytitle="@i - Busy working, please wait..." gnode.0="REQUESTER" mnode.0="MENU" stdbut="OK" errtext="FinalWrapper failed:|@t|in line @l:|<@s>|(errornumber @n)" noselect="FinalWrapper failed:|First select an object and|a text block or some text|or enter the values in the|appropriate gadgets!" nolib="FinalWrapper failed:|Couldn't open '@y'" nofw="Run Final Writer first!" wrongos="FinalWrapper failed:|At least OS2.0 is required!" nogui="FinalWrapper failed:|Couldn't open requester!" notnum="@g|Value must be numeric!" noreqtools="Couldn't open rexxreqtools.library!" nohelp="On-line help not available!" rxcmderr="Unknown Arexx command|or syntax error:|@c" rxfilerq="Execute Arexx macro:" rxfileok="OK" about="FinalWrapper @v (@d)||For suggestions & bugs write to:| Andreas Weiss| Dorfstrasse 24| CH-8212 Nohl| (Switzerland)||This program is SHAREWARE!|The share is sfr/DM 20 or $15" arc=newgadget(2,"u",1,360,0,"ARC",0,9999) ltxt.arc.1="Use arc °: Clockwise" ltxt.arc.2="Use arc °: Anticlockwise" beg=newgadget(3,"b",0,0,0,"BEGIN",0,359) ltxt.beg.1="Begin °: Absolute" ltxt.beg.2="Begin °: Clockwise" ltxt.beg.3="Begin °: Anticlockwise" rot=newgadget(7,"r",0,0,0,"ROTATE",0,359) ltxt.rot.1="Rotate °: Absolute" ltxt.rot.2="Rotate °: Like text block" ltxt.rot.3="Rotate °: Clockwise" ltxt.rot.4="Rotate °: Anticlockwise" ltxt.rot.5="Rotate °: Delta clockwise" ltxt.rot.6="Rotate °: Delta anticlock" ltxt.rot.7="Rotate : Title mode" dlt=newgadget(-4,"d",0,0,0,"DELETE") ltxt.dlt.1="Delete: Nothing" ltxt.dlt.2="Delete: Oval only" ltxt.dlt.3="Delete: Oval and text block" ltxt.dlt.4="Delete: Copy oval" grp=newgadget(-3,"g",0,0,0,"GROUP") ltxt.grp.1="Group: No" ltxt.grp.2="Group: Selected oval" ltxt.grp.3="Group: Invisible oval" wrd=newgadget(-4,"j",0,0,0,"WORDMODE") ltxt.wrd.1="Join words: No" ltxt.wrd.2="Join words: Centered" ltxt.wrd.3="Join words: Align left" ltxt.wrd.4="Join words: Align right" spl=newgadget(2,"s",0,25,0,"SPIRAL",1,100) ltxt.spl.1="Spiral %: Outside > inside" ltxt.spl.2="Spiral %: Inside > outside" siz=newgadget(2,"f",0,100,0,"SIZE",1,100) ltxt.siz.1="Font size %: Decreasing" ltxt.siz.2="Font size %: Increasing" zoo=newgadget(3,"z",0,50,0,"ZOOM",1,1000) ltxt.zoo.1="Zoom %: All" ltxt.zoo.2="Zoom %: Height" ltxt.zoo.3="Zoom %: Width" ink=newgadget(-5,"i",0,0,0,"COLOUR") ltxt.ink.1="Ink: From text" ltxt.ink.2="Ink: From oval fill" ltxt.ink.3="Ink: From oval border" ltxt.ink.4="Ink: Shadow = oval fill" ltxt.ink.5="Ink: Shadow = oval border" adj=newgadget(-5,"a",0,0,0,"ADJUST") ltxt.adj.1="Adjust: Nothing" ltxt.adj.2="Adjust: Character size" ltxt.adj.3="Adjust: Character width" ltxt.adj.4="Adjust: Apparent width" ltxt.adj.5="Adjust: Arc" adjarc=5 pat=newgadget(0,"p",0,0,0,"PATTERN") ltxt.pat="Pattern from selected text" xgad=newstr(7,"x",1,"",1,"XPOS") ltxt.xgad="(@m) X:" ygad=newstr(7,"y",1,"",1,"YPOS") ltxt.ygad="Y:" wgad=newstr(7,"w",1,"",1,"WIDTH") ltxt.wgad="Width:" hgad=newstr(7,"h",1,"",1,"HEIGHT") ltxt.hgad="Height:" pgad=newstr(4,"#",1,1,0,"PAGE") ltxt.pgad="# of page:" tgad=newstr(200,"t",2,"",2,"TEXT") ltxt.tgad="Text:" okgad=newbutton(" OK ","o",RETURN,"OK") cancelgad=newbutton("Cancel","c",esc,"CANCEL") closegad=newkey(del,"CLOSE") zipgad=newkey(" ","ZIP") depthgad=newkey(bs,"BACK") mtitle="Settings" mgad=newchkitem("Gadgets are auto-activated","G",1,"ACTIVATE") mspl=newchkitem("Adjust arc for spirals","A",1,"IMPROVE") mwin=newchkitem("Window beneath pointer","W",1,"WINDOW") mscr=newchkitem("Use Final Writer's screen","U",1,"SCREEN") mrel=newchkitem("Final Writer Release 3","F",1,"RELEASE") CALL newitem("","",mnode.0) mload=newitem("Load","L","LOAD") msave=newitem("Save","S","SAVE") mres=newitem("Reset","R","RESET") mdef=newitem("Defaults","D","DEFAULTS") CALL newitem("","",mnode.0) mtext=newitem("Text block preferences","T","TEXTPREFS") moval=newitem("Oval preferences","O","OVALPREFS") CALL newitem("","",mnode.0) mnext=newitem("Next Document","N","NEXT") mrexx=newitem("Execute Arexx macro...","E","MACRO") mhelp=newitem("Help...","H","HELP") mabt=newitem("About...","?","ABOUT") fwerrtext.5="Instruction didn't succeed" fwerrtext.10="Instruction failed" fwerrtext.20="Invalid arguments" fwerrtext.100="Unknown instruction" fwerrtext.200="Couldn't open fwarexx.library" END RETURN checkenv: about=replacepat(replacepat(about,"@v",version),"@d",date) info=replacepat(replacepat("FinalWrapper @v by NDY's","@v",version),"@d",date) origwintitle=replacepat(origwintitle,"@i",info) origscrtitle=replacepat(origscrtitle,"@i",info) wtitle=origwintitle stitle=origscrtitle busytitle=replacepat(busytitle,"@i",info) doc="" CALL newdoc menus=mchks+macts gads=agads+tgads+sgads kgads=gads+wgads menuoff=kgads i=32+menuoff mnode.i=mnode.0 prefsize=agads*4+mchks+4 prefsid="FW30"||D2C(prefsize,2) tempsize=0 IF temp~="" THEN DO id=agads+1 TO agads+sgads tempsize=tempsize+len.id END cancelclose=cancelgad-agads okclose=okgad-agads winclose=tgads+1 rxclose=winclose+1 nextclose=rxclose+1 DO id=1 TO kgads IF ~Datatype(lkey.id,"W") THEN lkey.id=C2D(Upper(lkey.id)) END IF initerr=14 THEN DO ln=replacepat(nolib,"@y",library.libn) CALL message(14,ln) CALL bye(14) END execbase=GETVALUE("4"x,0,4,"P") osversion=GETVALUE(execbase,20,2,"N") IF osversion<37 THEN CALL message(10,wrongos) IF ~xexists(fwkey) THEN fwkey="" IF help THEN DO docfile="HELP:"||language||"/"||docname IF ~xexists(docfile) THEN DO docfile="ENVARC:FinalWrapper/"||docname IF ~xexists(docfile) THEN help=0 END END RETURN guiinit: IF cleangui THEN RETURN 0 pubscr=Null() ; scr=Null() ; win=Null() ; gad=Null() ; scrvinfo=Null() ; menu=Null() ; port=0 ; menustrip=0 cleangui=1 CALL SET_APIG_GLOBALS() GT_TAGBASE=X2D("80080000") GTMN_NEWLOOKMENUS=X2C("80080043") GTCB_SCALED=X2C("80080044") WA_NEWLOOKMENUS=X2C("80000093") nullbyte=D2C(0) port=OpenPort(portname) IF ~port THEN RETURN 5 pubscr=LockPubScreen("") IF pubscr=Null() THEN RETURN 5 IF pubonly THEN scr=pubscr ELSE scr=customscr scrvinfo=GetVisualInfo(scr) IF scrvinfo=Null() THEN RETURN 5 scrfont=GETVALUE(scr,40,4,"P") fonth=GETVALUE(scrfont,4,2,"N") scrrp=D2C(C2D(scr)+84) glistptr=MAKEPOINTER(0,0,4,MEMF_CLEAR) IF glistptr=Null() THEN RETURN 5 borderl=GETVALUE(scr,36,1,"N") borderr=GETVALUE(scr,37,1,"N") bordert=GETVALUE(scr,35,1,"N")+fonth+1 pubname="" pubnptr=MAKEPOINTER(0,0,MAXPUBSCREENNAME,MEMF_CLEAR) IF pubnptr~=Null() THEN DO checkscr=GetDefaultPubScreen(pubnptr) IF checkscr=pubscr THEN pubname=Import(pubnptr) CALL FREETHIS(pubnptr) END IF pubname="" THEN DO pubname="Workbench" usewb=1 END ELSE usewb=0 rows=2 gadh=fonth+4 gaddy=gadh+2 DO i=1 TO 3+slines maxwidth.i=0 END charw=TextLength(scrrp,"W"||nullbyte,-1) intw=charw*4+12 strminw=charw*2+6 addwidth=30+intw gperrow=agads%rows+agads//rows DO id=1 TO agads k=1+(id>gperrow) IF labs.id=0 THEN DO gwid.id=TextLength(scrrp,ltxt.id||nullbyte,-1)+34 maxwidth.k=Max(maxwidth.k,gwid.id) END ELSE DO glabels.id=MAKEPOINTER(0,0,4*Abs(labs.id)+4,MEMF_CLEAR) IF glabels.id=Null() THEN RETURN 5 DO i=1 TO Abs(labs.id) lbuf.id.i=MAKEPOINTER(glabels.id,0,Length(ltxt.id.i)+1,MEMF_CLEAR) IF lbuf.id.i=Null() THEN RETURN 5 CALL Export(lbuf.id.i,ltxt.id.i) CALL SETVALUE(glabels.id,(i-1)*4,4,"P",lbuf.id.i) xwid=TextLength(scrrp,ltxt.id.i||nullbyte,-1)+30 IF labs.id>0 THEN xwid=xwid+addwidth maxwidth.k=Max(maxwidth.k,xwid) END END END DO i=1 TO slines nsgads.i=0 END DO id=agads+1 TO agads+sgads gwid.id=TextLength(scrrp,ltxt.id||nullbyte,-1) lin=line.id maxnr=3+lin maxwidth.maxnr=maxwidth.maxnr+gwid.id+strminw+12 nsgads.lin=nsgads.lin+1 END DO id=agads+sgads+1 TO gads gwid.id=TextLength(scrrp,ltxt.id||nullbyte,-1)+6 maxwidth.3=maxwidth.3+gwid.id+2 END maxwidth=Max((Max(maxwidth.1,maxwidth.2)+4)*rows-4,maxwidth.3) DO i=4 TO slines+3 maxwidth=Max(maxwidth,maxwidth.i) END winwid=maxwidth+4 winhi=(gperrow+1+slines)*gaddy+6 gadx=borderl+2 gady=bordert+1 gadw=maxwidth%rows-rows*2+2 gadmaxx=winwid+borderl-2 gadmaxy=winhi+bordert-1 id=0 gx=gadx cyx=gx chkx=gx+gadw-26 intx=gx+gadw-28-intw textplace=PLACETEXT_LEFT DO i=0 TO 1 DO j=0 TO gperrow-1 WHILE id<agads id=i*gperrow+j+1 gadid=id*3 IF labs.id>0 THEN DO newgadx.id=MAKENEWGADGET(scrvinfo,scrfont,gx,gady+j*gaddy,gadw-addwidth,gadh,"",0,gadid,Null()) newgadxb.id=MAKENEWGADGET(scrvinfo,scrfont,chkx,gady+j*gaddy,26,gadh,"",0,gadid+1,Null()) newgadxi.id=MAKENEWGADGET(scrvinfo,scrfont,intx,gady+j*gaddy,intw,gadh,"",0,gadid+2,Null()) IF newgadxb.id=Null() | newgadxi.id=Null() | newgadx.id=Null() THEN RETURN 5 END ELSE DO IF labs.id<0 THEN newgadx.id=MAKENEWGADGET(scrvinfo,scrfont,cyx,gady+j*gaddy,gadw,gadh,"",0,id*3,Null()) ELSE newgadx.id=MAKENEWGADGET(scrvinfo,scrfont,chkx,gady+j*gaddy,26,gadh,ltxt.id,textplace,id*3+1,Null()) IF newgadx.id=Null() THEN RETURN 5 END END chkx=gadmaxx-gadw intx=chkx+28 gx=chkx+addwidth cyx=chkx textplace=PLACETEXT_RIGHT END gy=gady+gaddy*gperrow DO i=1 TO slines gx=gadx maxnr=i+3 strw=(maxwidth-maxwidth.maxnr)%(nsgads.i)+strminw DO id=agads+1 TO agads+sgads IF line.id=i THEN DO nsgads.i=nsgads.i-1 IF nsgads.i=0 THEN strw=gadmaxx-(gx+gwid.id+8) newgadx.id=MAKENEWGADGET(scrvinfo,scrfont,gx+gwid.id+8,gy,strw,gadh,ltxt.id,PLACETEXT_LEFT,id*3+2,Null()) gx=gx+gwid.id+strw+12 IF newgadx.id=Null() THEN RETURN 5 END END gy=gy+gaddy END gx=gadx+(maxwidth-maxwidth.3)%2 DO id=agads+sgads+1 TO gads newgadx.id=MAKENEWGADGET(scrvinfo,scrfont,gx,gadmaxy-gadh,gwid.id,gadh,ltxt.id,PLACETEXT_IN,id*3,Null()) gx=gx+gwid.id+4 IF newgadx.id=Null() THEN RETURN 5 END newgadbv=MAKENEWGADGET(scrvinfo,scrfont,gadx,gadmaxy-gadh-5,maxwidth,2,0,0,Null()) gad=CreateContext(glistptr) prev=gad DO id=1 TO gads IF id>agads THEN IF id>agads+sgads THEN DO checkgad.id=CreateGadget(BUTTON_KIND,prev,newgadx.id,TAG_DONE,0) prev=checkgad.id END ELSE DO IF gtype.id=0 THEN intgad.id=CreateGadget(INTEGER_KIND,prev,newgadx.id,GTIN_NUMBER,val.id,GTIN_MAXCHARS,len.id,STRINGA_EXITHELP,1,TAG_DONE,0) ELSE intgad.id=CreateGadget(STRING_KIND,prev,newgadx.id,GTST_STRING,val.id,GTST_MAXCHARS,len.id,STRINGA_EXITHELP,1,TAG_DONE,0) prev=intgad.id END ELSE IF labs.id=0 THEN DO checkgad.id=CreateGadget(CHECKBOX_KIND,prev,newgadx.id,GTCB_CHECKED,check.id,GTCB_SCALED,-1,TAG_DONE,0) prev=checkgad.id END ELSE IF labs.id>0 THEN DO checkgad.id=CreateGadget(CHECKBOX_KIND,prev,newgadxb.id,GTCB_CHECKED,check.id,GTCB_SCALED,-1,TAG_DONE,0) intgad.id=CreateGadget(INTEGER_KIND,checkgad.id,newgadxi.id,GTIN_NUMBER,val.id,GTIN_MAXCHARS,4,STRINGA_EXITHELP,1,TAG_DONE,0) cyclegad.id=CreateGadget(CYCLE_KIND,intgad.id,newgadx.id,GTCY_LABELS,glabels.id,GTCY_ACTIVE,cycle.id,TAG_DONE,0) prev=cyclegad.id END ELSE DO cyclegad.id=CreateGadget(CYCLE_KIND,prev,newgadx.id,GTCY_LABELS,glabels.id,GTCY_ACTIVE,cycle.id,TAG_DONE,0) prev=cyclegad.id END END prev=CreateGadget(TEXT_KIND,prev,newgadbv,GTTX_BORDER,-1,TAG_DONE,0) IF prev=Null() THEN RETURN 5 mptr=MAKENEWMENU(menus) IF mptr=Null() THEN RETURN 5 CALL ADDTO_NEWMENU(mptr,NM_TITLE,mtitle,"",0,0,Null()) DO i=1 TO menus n=menuoff+i IF ltxt.n="" THEN mtxt=NM_BARLABEL ELSE mtxt=ltxt.n IF i>mchks THEN flags=MENUTOGGLE ELSE flags=CHECKED*check.n+CHECKIT+MENUTOGGLE IF Length(mkey.n)~=1 THEN mkey.n="" CALL ADDTO_NEWMENU(mptr,NM_ITEM,mtxt,mkey.n,flags,0,Null()) END DROP ltxt CALL ADDTO_NEWMENU(mptr,NM_END,"","",0,0,Null()) menu=CreateMenus(mptr,TAG_DONE,0) IF menu=Null() THEN RETURN 5 IF LayoutMenus(menu,scrvinfo,GTMN_NEWLOOKMENUS,-1,TAG_DONE,0)=0 THEN RETURN 5 winidcmp=IDCMP_CHANGEWINDOW+IDCMP_CLOSEWINDOW+IDCMP_GADGETUP+IDCMP_ACTIVEWINDOW+IDCMP_MOUSEBUTTONS+IDCMP_MENUPICK+IDCMP_VANILLAKEY+IDCMP_RAWKEY+IDCMP_MENUHELP winflags=WFLG_CLOSEGADGET+WFLG_DEPTHGADGET+WFLG_DRAGBAR+WFLG_ACTIVATE IF check.mwin THEN DO ymouse=GETVALUE(scr,16,2,"N") xmouse=GETVALUE(scr,18,2,"N") END ELSE DO ymouse=winx+winhi/2 xmouse=winy+winwid/2 END wtagl=MAKEPOINTER(0,0,104+8,MEMF_CLEAR) IF wtagl=Null() THEN RETURN 5 wname=MAKEPOINTER(wtagl,0,Length(wintitle)+1,MEMF_CLEAR) IF wname=Null() THEN RETURN 5 CALL Export(wname,wintitle) sname=MAKEPOINTER(wtagl,0,Length(scrtitle)+1,MEMF_CLEAR) IF sname=Null() THEN RETURN 5 CALL Export(sname,scrtitle) wzipdims=MAKEPOINTER(wtagl,0,8,MEMF_CLEAR) IF wzipdims=Null() THEN RETURN 5 zipwid=winwid+borderl+borderr ziphi=bordert CALL SETVALUE(wzipdims,4,2,"N",zipwid) CALL SETVALUE(wzipdims,6,2,"N",ziphi) CALL SETTAGSLOT(wtagl,0,WA_LEFT,"N",Max(xmouse-winwid/2,0)) CALL SETTAGSLOT(wtagl,1,WA_TOP,"N",Max(ymouse-winhi/2,0)) CALL SETTAGSLOT(wtagl,2,WA_INNERWIDTH,"N",winwid) CALL SETTAGSLOT(wtagl,3,WA_INNERHEIGHT,"N",winhi) CALL SETTAGSLOT(wtagl,4,WA_IDCMP,"N",winidcmp) CALL SETTAGSLOT(wtagl,5,WA_FLAGS,"N",winflags) CALL SETTAGSLOT(wtagl,6,WA_TITLE,"P",wname) CALL SETTAGSLOT(wtagl,7,WA_SCREENTITLE,"P",sname) CALL SETTAGSLOT(wtagl,8,WA_GADGETS,"P",gad) IF pubonly THEN CALL SETTAGSLOT(wtagl,9,WA_PUBSCREEN,"P",scr) ELSE CALL SETTAGSLOT(wtagl,9,WA_CUSTOMSCREEN,"P",scr) CALL SETTAGSLOT(wtagl,10,WA_ZOOM,"P",wzipdims) CALL SETTAGSLOT(wtagl,11,WA_NEWLOOKMENUS,"N",-1) CALL SETTAGSLOT(wtagl,12,WA_MENUHELP,"N",-1) CALL SETTAGSLOT(wtagl,13,TAG_DONE,"N",0) win=OpenWindowTagList(portname,Null(),wtagl,0) IF win=Null() THEN RETURN 5 rp=GETWINDOWRASTPORT(win) dwid=GETVALUE(win,8,2,"N")-zipwid dhi=GETVALUE(win,10,2,"N")-ziphi CALL GT_RefreshWindow(win,Null()) CALL SetMenuStrip(win,menu) menustrip=1 zoomed=1 RETURN 0 messy: IF port=0 THEN RETURN DO FOREVER msg=GetPkt(portname) IF msg=Null() THEN LEAVE msgclass=GetArg(msg,0) zipped=GETVALUE(win,10,2,"N")=ziphi IF ~Datatype(msgclass,"W") THEN CALL rx ELSE DO code=GetArg(msg,1) qual=GetArg(msg,2) gadid=GetArg(msg,9) CALL Reply(msg,0) END actgads=check.mgad & ~zipped nospiral=~check.spl IF msgclass=IDCMP_VANILLAKEY THEN DO code=C2D(Upper(D2C(code))) DO id=1 TO kgads IF code=lkey.id | code=lkey2.id THEN DO IF id=zipgad THEN DO CALL ZipWindow(win) LEAVE END ELSE IF id=depthgad THEN DO windowpos=~windowpos IF windowpos THEN CALL WindowToBack(win) ELSE CALL WindowToFront(win) LEAVE END ELSE IF id>agads+sgads THEN DO closed=id-agads LEAVE END IF ~zipped THEN DO msgclass=IDCMP_GADGETUP type=(qual//4)//3 IF labs.id=0 THEN type=1 IF labs.id<0 THEN type=0 IF id>agads THEN type=2 gadid=id*3+type IF type=2 | (actgads & ~(check.id & type=1)) THEN CALL ActivateGadget(intgad.id,win,Null()) IF type=1 THEN code=~check.id IF labs.id>=0 & type=1 THEN CALL GT_SetGadgetAttrs(checkgad.id,win,Null(),GTCB_CHECKED,code) IF type=0 THEN code=(cycle.id+1)//Abs(labs.id) IF labs.id~=0 & type=0 THEN CALL GT_SetGadgetAttrs(cyclegad.id,win,Null(),GTCY_ACTIVE,code) LEAVE END END END END SELECT WHEN msgclass=IDCMP_CLOSEWINDOW THEN closed=winclose WHEN msgclass=IDCMP_MENUPICK THEN DO mnr=(code%32)//32+1 n=menuoff+mnr IF mnr<=mchks THEN check.n=~check.n SELECT WHEN n=mload THEN CALL loaddef(2) WHEN n=msave THEN CALL savedef(2) WHEN n=mres THEN CALL loaddef(1) WHEN n=mdef THEN CALL loaddef(0) WHEN n=mabt THEN CALL message(0,about) WHEN n=mtext THEN IF portok THEN DO resume="BACKMESSY" errtrap=10 TextBlockPrefs "PROMPT" END WHEN n=moval THEN IF portok THEN DO resume="BACKMESSY" errtrap=10 OvalPrefs "PROMPT" END WHEN n=mnext THEN DO x=SubStr(rxport,Length(finalw)+1) i=x DO UNTIL Show("P",rxport) | i=x i=i//20+1 rxport=finalw||i END IF x~=i THEN closed=nextclose END WHEN n=mrexx THEN IF lib.reqtools THEN DO i=Max(Pos(defdir,':'),LastPos('/',defdir)) resume="BACKMESSY" errtrap=14 newdir=RTFileRequest(SubStr(defdir,1,i),DelStr(defdir,1,i),rxfilerq,rxfileok,"RT_SCREENTOFRONT=TRUE") IF newdir~="" THEN DO defdir=newdir IF xexists("ENV:FinalWrapper") THEN IF Open(prefs,"ENV:FinalWrapper/FWPath","W") THEN DO CALL WriteLn(prefs,defdir) CALL Close(prefs) END closed=rxclose END END WHEN n=mhelp THEN IF help THEN DO IF usewb THEN CALL WBenchToFront() ELSE CALL ScreenToFront(pubscr) IF wb3 THEN CALL Shownode(pubname,docfile,"MAIN",1,0) ELSE CALL Shownode(pubname,docfile,"MAIN",1) CALL ScreenToFront(scr) END ELSE CALL message(0,nohelp) OTHERWISE NOP END END WHEN actgads & (msgclass=IDCMP_ACTIVEWINDOW | msgclass=IDCMP_MOUSEBUTTONS) THEN CALL ActivateGadget(intgad.1,win,Null()) WHEN msgclass=IDCMP_MENUHELP | (code=95 & (msgclass=IDCMP_RAWKEY | msgclass=IDCMP_GADGETUP)) THEN IF help THEN DO IF usewb THEN CALL WBenchToFront() ELSE CALL ScreenToFront(pubscr) mnr=(code%32)//32+1+menuoff IF msgclass=IDCMP_MENUHELP THEN node=mnode.mnr ELSE IF zipped THEN node=gnode.0 ELSE DO ymouse=getshort(C2D(win),12) xmouse=getshort(C2D(win),14) gad=GETVALUE(win,62,4,"P") id=0 IF xmouse>=0 & ymouse>=0 & xmouse<dwid+zipwid & ymouse<dhi+ziphi & gad~=Null() THEN DO UNTIL gad=Null() x=getshort(C2D(gad),4) y=getshort(C2D(gad),6) w=getshort(C2D(gad),8) h=getshort(C2D(gad),10) i=GETVALUE(gad,38,2,"N") IF xmouse>=x & xmouse<=x+w & ymouse>=y & ymouse<=y+h & i>0 THEN DO id=i%3 LEAVE END ELSE gad=GETVALUE(gad,0,4,"P") END node=gnode.id END IF wb3 THEN CALL Shownode(pubname,docfile,node,1,0) ELSE CALL Shownode(pubname,docfile,node,1) CALL ScreenToFront(scr) END ELSE CALL message(0,nohelp) WHEN msgclass=IDCMP_GADGETUP THEN DO type=gadid//3 id=gadid%3 SELECT WHEN id>agads+sgads THEN closed=id-agads WHEN type=2 THEN CALL checkstrgad WHEN type=1 THEN DO check.id=code IF labs.id>0 & check.id~=0 & actgads THEN CALL ActivateGadget(intgad.id,win,Null()) END OTHERWISE DO cycle.id=code check.id=1 IF labs.id>0 THEN CALL GT_SetGadgetAttrs(checkgad.id,win,Null(),GTCB_CHECKED,check.id) IF labs.id>0 & actgads THEN CALL ActivateGadget(intgad.id,win,Null()) END END END OTHERWISE NOP END IF check.mspl THEN IF check.spl & nospiral THEN DO cycle.adj=adjarc-1 CALL GT_SetGadgetAttrs(cyclegad.adj,win,Null(),GTCY_ACTIVE,cycle.adj) END END BACKMESSY: IF trapped THEN DO trapped=0 IF err=14 THEN DO lib.reqtools=0 CALL message(0,noreqtools) END END RETURN checkstrgad: old=val.id specialinfo=GETVALUE(intgad.id,34,4,"P") IF id>agads THEN DO IF gtype.id=0 THEN val.id=GETVALUE(specialinfo,28,4,"N") ELSE DO gval=GETVALUE(specialinfo,0,4,"S") IF gtype.id=1 & gval~=old THEN DO IF gval~="" THEN IF ~Datatype(replacepat(gval,",","."),"N") THEN DO IF closed=okclose THEN closed=0 IF closed=0 THEN CALL message(0,replacepat(notnum,"@g",ltxt.id)) END ELSE IF deci="COMMA" THEN val.id=replacepat(Max(replacepat(gval,",","."),0),".",",") ELSE val.id=Max(replacepat(gval,",","."),0) ELSE val.id="" IF val.id~=gval THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTST_STRING,val.id) END ELSE IF gtype.id=2 THEN val.id=gval END END ELSE DO gval=GETVALUE(specialinfo,28,4,"N") val.id=Max(Min(ubound.id,gval),lbound.id) IF val.id~=gval THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTIN_NUMBER,val.id) check.id=check.id | (old~=val.id & actgads) IF old~=val.id | actgads THEN CALL GT_SetGadgetAttrs(checkgad.id,win,Null(),GTCB_CHECKED,check.id) END RETURN rx: PARSE VAR msgclass comm ar.1 ar.2 ar.3 arg1=Upper(ar.1) arg2=SubStr(msgclass,Pos(ar.1,msgclass,Length(comm)+1)+Length(ar.1)+1) IF Datatype(arg1,"U") THEN INTERPRET "id="||arg1 comm=Upper(comm) full=msgclass msgclass=0 ret=0 res=0 SELECT WHEN comm="SETVAL" THEN IF checksyntax("W") & ar.2~="" THEN SELECT WHEN id>0 & id<=agads THEN IF labs.id>0 & Datatype(ar.2,"W") THEN DO gadid=id*3+2 msgclass=IDCMP_GADGETUP code=0 CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTIN_NUMBER,ar.2) res=val.id END WHEN id>agads & id<=agads+sgads THEN IF Datatype(replacepat(ar.2,",","."),Word("W N A",gtype.id+1)) | gtype.id=2 THEN DO gadid=id*3+2 msgclass=IDCMP_GADGETUP code=0 IF gtype.id=2 THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTST_STRING,arg2) ELSE IF gtype.id=1 THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTST_STRING,ar.2) ELSE CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTIN_NUMBER,ar.2) res=val.id END OTHERWISE NOP END WHEN comm="SETMODE" THEN IF checksyntax("W","w") & id>0 & id<=agads & labs.id~=0 THEN DO gadid=id*3 msgclass=IDCMP_GADGETUP code=ar.2 CALL GT_SetGadgetAttrs(cyclegad.id,win,Null(),GTCY_ACTIVE,code) res=cycle.id END WHEN comm="SETSTATE" THEN IF checksyntax("W","w") THEN IF id>0 & id<=agads THEN IF labs.id>=0 THEN DO gadid=id*3+1 msgclass=IDCMP_GADGETUP code=(ar.2~=0) CALL GT_SetGadgetAttrs(checkgad.id,win,Null(),GTCB_CHECKED,code) res=check.id END ELSE DO gadid=id*3 msgclass=IDCMP_GADGETUP code=(ar.2~=0) CALL GT_SetGadgetAttrs(cyclegad.id,win,Null(),GTCY_ACTIVE,code) res=(cycle.id~=0) END ELSE IF id>menuoff & id<=menuoff+mchks THEN DO check.id=(ar.2~=0) CALL ClearMenuStrip(win) item=GETVALUE(menu,18,4,"P") DO n=menuoff+1 TO id-1 item=GETVALUE(item,0,4,"P") END flags=C2D(B2C(BitAnd(C2B(D2C(GETVALUE(item,12,2,"N"),2)),"1111111011111111")))+CHECKED*check.id CALL SETVALUE(item,12,2,"N",flags,0) CALL ResetMenuStrip(win,menu) msgclass=-1 END WHEN comm="GETVAL" THEN IF checksyntax("W") & id>0 & ((id<=agads & labs.id>0) | id<=agads+sgads) THEN DO specialinfo=GETVALUE(intgad.id,34,4,"P") IF id>agads & gtype.id~=0 THEN DO val=GETVALUE(specialinfo,0,4,"S") IF gtype.id=1 THEN val=replacepat(val,",",".") END ELSE val=GETVALUE(specialinfo,28,4,"N") res=val msgclass=-1 END WHEN comm="GETMODE" THEN IF checksyntax("W") & id>0 & id<=agads THEN DO res=cycle.id msgclass=-1 END WHEN comm="GETSTATE" THEN IF checksyntax("W") & ((id>0 & id<=agads) | (id>menuoff & id<=menuoff+mchks)) THEN DO IF id>0 & id<=agads & labs.id<0 THEN res=(cycle.id~=0) ELSE res=check.id msgclass=-1 END WHEN comm="USE" THEN IF checksyntax("W") THEN IF id>=agads+sgads & id<=kgads THEN DO msgclass=-1 IF id=zipgad THEN CALL ZipWindow(win) ELSE IF id=depthgad THEN DO windowpos=~windowpos IF windowpos THEN CALL WindowToBack(win) ELSE CALL WindowToFront(win) END ELSE DO msgclass=IDCMP_GADGETUP code=0 gadid=id*3 END END ELSE IF id>menuoff+mchks & id<=menuoff+mchks+macts THEN DO msgclass=IDCMP_MENUPICK code=(id-1-menuoff)*32 END WHEN comm="SETSTYLE" THEN IF ar.1>=0 & ar.1<=Length(text) THEN DO msgclass=-1 IF ar.1=0 THEN DO j=1 k=Length(text) END ELSE DO j=ar.1 k=j END y=arg2 DO i=j TO k tprfs=specs.i tfontp=font.i tcolourp=colour.i arg2=y DO WHILE arg2~="" x=Upper(Word(arg2,1)) v=Word(arg2,2) SELECT WHEN Pos(x||"|","SIZE|WIDTH|OBLIQUE|")>0 THEN DO p=Pos(x,tprfs) tprfs=Left(tprfs,p-1)||x v DelWord(SubStr(tprfs,p),1,2) END WHEN x="COLOR" THEN tcolourp=x v WHEN x="FONT" THEN tfontp=x v WHEN Pos(x||"|","LEADING|POSITION|CASE|STYLE|")>0 THEN NOP OTHERWISE msgclass=0 END arg2=DelWord(arg2,1,2) END specs.i=tprfs font.i=tfontp colour.i=tcolourp END END WHEN comm="GETSTYLE" THEN IF ar.1>=0 & ar.1<=Length(text) THEN DO msgclass=-1 i=ar.1 IF i=0 THEN DO specs.i=defspecs font.i=deffont colour.i=defcolour END SELECT WHEN arg2="" THEN res=specs.i colour.i font.i WHEN arg2="FONT" THEN res=SubStr(font.i,6) WHEN arg2="COLOR"THEN res=SubStr(colour.i,7) WHEN Pos(arg2||"|","SIZE|WIDTH|OBLIQUE|")>0 THEN res=Word(SubStr(specs.i,Pos(arg2,specs.i)+Length(arg2)+1),1) WHEN Pos(arg2||"|","LEADING|POSITION|CASE|STYLE|")>0 THEN res=Word(SubStr(defspecs,Pos(arg2,defspecs)+Length(arg2)+1),1) OTHERWISE msgclass=0 END IF i=0 THEN DO specs.i="" font.i="" colour.i="" END END WHEN comm="SET" THEN DO msgclass=-1 SELECT WHEN Abbrev("PORT",arg1,1) THEN DO IF Show("P",ar.2) & Left(ar.2,Length(finalw))=finalw THEN rxport=ar.2 res=rxport END WHEN Abbrev("SCREEN",arg1,1) THEN DO IF arg2="" THEN stitle=origscrtitle ELSE stitle=arg2 scrtitle=replacepat(replacepat(stitle,"@f",doc),"@i",info) CALL SetWindowTitles(win,wintitle,scrtitle) END WHEN Abbrev("WINDOW",arg1,1) THEN DO IF arg2="" THEN wtitle=origwintitle ELSE wtitle=arg2 wintitle=replacepat(replacepat(wtitle,"@f",doc),"@i",info) CALL SetWindowTitles(win,wintitle,scrtitle) END WHEN Abbrev("ZIP",arg1,1) THEN DO res=zipped zipped=(ar.2~=0) IF zipped~=res THEN CALL ZipWindow(win) END OTHERWISE msgclass=0 END END WHEN comm="GET" THEN DO msgclass=-1 SELECT WHEN Abbrev("PORT",arg1,1) THEN IF portok THEN res=rxport ELSE res="" WHEN Abbrev("REQTOOLS",arg1,1) THEN res=lib.reqtools WHEN Abbrev("SCREEN",arg1,1) THEN res=scrtitle WHEN Abbrev("VERSION",arg1,1) THEN res=version WHEN Abbrev("WINDOW",arg1,1) THEN res=wintitle WHEN Abbrev("ZIP",arg1,1) THEN res=zipped OTHERWISE msgclass=0 END END WHEN comm="PREFS" THEN DO msgclass=-1 IF Abbrev("STORE",arg1,1) THEN DO CALL savedef(1) prefsstore=0 END ELSE IF Abbrev("RESET",arg1,1) THEN DO CALL loaddef(1) prefsstore=1 END ELSE CALL loaddef(0) END WHEN comm="POPFRONT" THEN DO IF zipped THEN CALL ZipWindow(win) CALL WindowToFront(win) CALL ScreenToFront(scr) CALL ActivateWindow(win) msgclass=-1 END WHEN comm="DIE" THEN DO msgclass=-1 res=lockcnt IF lockcnt=0 THEN DO CALL Reply(msg,0) IF ar.1~="" & Datatype(ar.1,"W") THEN IF ar.2~="" THEN DO CALL message(ar.1,replacepat(ar.2,"_"," "),replacepat(ar.3,"_"," ")) IF ar.1=0 THEN CALL bye(0) END ELSE CALL bye(ar.1) ELSE CALL bye(0) END END WHEN comm="MESSAGE" THEN DO msgclass=-1 res=message(0,replacepat(ar.1,"_"," "),replacepat(ar.2,"_"," "),replacepat(ar.3,"_"," ")) END WHEN comm="LOCK" THEN DO msgclass=-1 IF Abbrev("ON",arg1,2) THEN lockcnt=lockcnt+1 ELSE IF Abbrev("OFF",arg1,2) THEN lockcnt=Max(0,lockcnt-1) ELSE IF Abbrev("RESET",arg1,1) THEN lockcnt=0 res=lockcnt END WHEN comm="ABORT" THEN msgclass=-1 WHEN comm="GO" THEN DO msgclass=IDCMP_GADGETUP code=0 gadid=okgad*3 replymsg=msg stilltoreply=1 RETURN END OTHERWISE NOP END IF msgclass=0 THEN CALL Reply(msg,5) ELSE CALL Reply(msg,ret,res) IF msgclass=0 THEN CALL message(0,replacepat(rxcmderr,"@c",full)) RETURN quickmessy: IF port=0 THEN RETURN 0 DO FOREVER msg=GetPkt(portname) IF msg=Null() THEN LEAVE msgclass=GetArg(msg,0) IF msgclass=IDCMP_CLOSEWINDOW THEN closed=winclose ELSE IF msgclass=IDCMP_CHANGEWINDOW THEN IF ~BitTst(D2C(GETVALUE(win,24,4,"N")),28) THEN CALL ZipWindow(win) IF Datatype(msgclass,"W") THEN CALL Reply(msg,0) ELSE IF Upper(msgclass)="ABORT" THEN DO closed=winclose CALL Reply(msg,0) END ELSE CALL Reply(msg,1) END RETURN closed~=0 guiclean: IF cleangui THEN DO IF pubscr~=Null() THEN CALL UnLockPubScreen(Null(),pubscr) IF win~=Null() THEN DO IF menustrip THEN CALL ClearMenuStrip(win) CALL CloseWindow(win) END IF menu~=Null() THEN CALL FreeMenus(menu) IF gad~=Null() THEN CALL FreeGadgets(gad) IF scrvinfo~=Null() THEN CALL FreeVisualInfo(scrvinfo) IF port THEN CALL ClosePort(portname) port=0 DO id=1 TO gads CALL FREETHIS(newgadx.id) CALL FREETHIS(newgadxi.id) CALL FREETHIS(newgadxb.id) CALL FREETHIS(glabels.id) END CALL FREETHIS(newgadbv) CALL FREETHIS(mptr) CALL FREETHIS(wtagl) CALL FREETHIS(glistptr) CALL FREETHIS(pubnptr) cleangui=0 END RETURN options: GetTextBlockPrefs "TEXTFLOW FLOWDIST TEXT" PARSE VAR RESULT defflow deffld deftext defprfs="" IF defflow~="" THEN defprfs=defprfs "TEXTFLOW" defflow IF deffld~="" THEN defprfs=defprfs "FLOWDIST" deffld IF deftext~="" THEN defprfs=defprfs "TEXT" deftext GetTextBlockTypePrefs "SIZE LEADING WIDTH OBLIQUE POSITION CASE STYLE COLOR FONT" PARSE VAR RESULT tsize tlead twid tobl tpos tcase tstyl tcol tfont defspecs="SIZE" tsize "LEADING" tlead "WIDTH" twid "OBLIQUE" tobl "POSITION" tpos "CASE" tcase "STYLE" tstyl defcolour="COLOR" tcol IF Left(tfont,1)~=" " THEN tfont=" "||tfont deffont="FONT"||tfont ssize=360 start="+0" Status "PAGES" docpages=RESULT IF val.xgad~="" THEN ovalx=replacepat(val.xgad,",",".") IF val.ygad~="" THEN ovaly=replacepat(val.ygad,",",".") IF val.wgad~="" THEN ovalw=replacepat(val.wgad,",",".") IF val.hgad~="" THEN ovalh=replacepat(val.hgad,",",".") IF val.pgad~=0 THEN ovalp=Min(Max(val.pgad,1),docpages) IF Left(text,Min(len.tgad,Length(text)))~=val.tgad THEN DO text=val.tgad gadgettext=1 virtualtext=1 END rescan=Length(text)=0 IF check.arc THEN ssize=SubStr("+-",cycle.arc+1,1)||val.arc IF check.beg THEN start=SubStr(" -+",cycle.beg+1,1)||val.beg titlemd=check.rot & (cycle.rot=6) norrot=~check.rot | titlemd IF norrot THEN rrot="" ELSE IF cycle.rot=1 THEN rrot="=" ELSE IF cycle.rot=0 THEN rrot=val.rot ELSE DO rrot=SubStr("+-",cycle.rot//2+1,1)||val.rot IF cycle.rot>3 THEN rrot=" "||rrot END delete=SubStr("- +=",cycle.dlt+1,1) ogrp=SubStr(" +-",cycle.grp+1,1) dordim=check.spl rdim="" IF check.spl THEN rdim=SubStr("+-",cycle.spl+1,1)||val.spl dohdim=check.siz | check.spl hdim="" IF check.siz THEN hdim=SubStr("+-",cycle.siz+1,1)||val.siz ELSE IF check.spl THEN hdim=rdim doresize=check.zoo IF check.zoo THEN DO resize=val.zoo resizek=SubStr("+|-",cycle.zoo+1,1) END adjust=cycle.adj doadj=(adjust>0) fillcol=cycle.ink//2 shadow=cycle.ink=3 | cycle.ink=4 resetcol=(cycle.ink=0) | shadow attr=check.pat wordmd=cycle.wrd>0 wordoff=SubStr(" 0 0+1-1",2*cycle.wrd+1,2) charmd=~wordmd IF ssize=0 THEN ssize=0.01 absstart=0 IF Verify(Left(start,1),"+-","m")=0 THEN DO absstart=1 start=Max(Min(start,360),0) END ELSE start=Max(Min(start,360),-360) IF dordim THEN rdim=Max(Min(rdim,100),-100) ELSE ssize=Max(Min(ssize,360),-360) IF rdim=0 THEN rdim=0.01 IF dohdim THEN hdim=Max(Min(hdim,100),-100) ELSE hdim=rdim IF hdim=0 THEN hdim=0.01 IF doresize THEN DO resizex=Max(Min(resize,1000),5)/100 resizey=resizex resize=resizex IF resizek="|" THEN resizex=1 ELSE IF resizek="-" THEN resizey=1 END drot=0 deltarot=0 dodrot=0 IF Verify(Left(rrot,1),"+-","m")>0 THEN DO drot=Max(Min(rrot,360),-360) rrot="" norrot=1 END ELSE IF Left(rrot,1)=" " & rrot~="" THEN DO deltarot=Max(Min(rrot,360),-360) dodrot=1 rrot=0 END ELSE IF rrot~="" & rrot~="=" THEN rrot=Max(Min(rrot,360),-360) IF rrot="=" THEN rrot=txtrot||" " RETURN chosenobjs: ovalrescan=0 txtrescan=0 txt=0 oval=0 len=0 FirstObject "SELECTED" o=RESULT IF o~=0 THEN DO cnt=0 DO UNTIL o=0 gobj.cnt=o NextObject o "SELECTED" o=RESULT cnt=cnt+1 END DO i=0 TO cnt-1 WHILE oval=0 | txt=0 GetObjectType gobj.i IF RESULT=7 THEN txt=gobj.i IF RESULT=6 THEN oval=gobj.i END END IF oval=0 THEN oval=oldoval ELSE ovalrescan=1 IF gadgettext THEN len=Length(text) IF gadgettext & ~(init | rescan) THEN txt=0 CALL getattr Status "PARAPOS" pos=RESULT PARSE VAR pos para ppos x Status "PARACHARS" plen=RESULT IF txt=0 & ~newattr THEN IF Words(pos)=4 & (~gadgettext | rescan | init) THEN DO Extract text=RESULT len=Length(text) IF C2X(Right(text,1))="0A" THEN len=len-1 text="" MoveToPara para ppos virtualtext=0 ppos=0 END ELSE IF plen~=0 & (rescan | ((plen~=oldplen | para~=oldpara | ppos~=oldppos) & ~gadgettext)) THEN DO len=plen text="" virtualtext=0 IF ppos~=0 THEN MoveToPara para 0 ppos=0 END IF txt>0 THEN DO GetTextBlockText txt text=RESULT len=Length(text) END IF len=0 & text~="" THEN DO objs=oldobjs len=oldlen END ELSE txtrescan=1 IF (len=0 | oval=0) & ~init THEN DO IF len=0 & text~="" THEN DO len=Length(text) txtrescan=1 END IF oval=0 & ovalx~="" & ovaly~="" & ovalw~="" & ovalh~="" & ovalp~="" THEN oval=-1 IF len=0 | oval=0 THEN DO CALL message(0,noselect) RETURN 5 END END gadgettext=0 oldoval=oval oldtxt=txt oldlen=len oldobjs=objs oldpara=para oldppos=ppos oldplen=plen redrawchars=1 RETURN 0 getattr: newattr=0 IF ~attr | init THEN RETURN 5 Status "PARAPOS" pos=RESULT IF Words(pos)~=4 THEN RETURN 5 PARSE VAR pos para ppos x Extract atext=RESULT MoveToPara para ppos alen=Length(atext) IF C2X(Right(atext,1))="0A" THEN alen=alen-1 IF alen=0 THEN RETURN 5 DO i=1 TO alen Cursor "RIGHT" aspecs.i=gettexttypespecs() Status "FONTNAME" afont.i="FONT" RESULT Status "FONTCOLOR" acolour.i="COLOR" RESULT IF quickmessy() THEN DO CALL remobjs oldlen=0 alen=0 oldobjs=0 RETURN 5 END END MoveToPara para 0 oldppos=0 oldpara=para Status "PARACHARS" oldplen=RESULT newattr=1 RETURN 0 oval: IF ovalrescan THEN DO GetObjectRotation oval orot=RESULT IF orot~=0 THEN SetObjectRotation oval 0 GetObjectCoords oval PARSE VAR RESULT ovalp ovalx ovaly ovalw ovalh IF ovalw<0 THEN DO ovalx=ovalx+ovalw ovalw=-ovalw END IF ovalh<0 THEN DO ovaly=ovaly+ovalh ovalh=-ovalh END val.xgad=Left(ovalx,Min(len.xgad,Length(ovalx))) val.ygad=Left(ovaly,Min(len.ygad,Length(ovaly))) val.wgad=Left(ovalw,Min(len.wgad,Length(ovalw))) val.hgad=replacepat(Left(ovalh,Min(len.hgad,Length(ovalh)))," ","") val.pgad=Left(ovalp,Min(len.pgad,Length(ovalp))) IF deci="COMMA" THEN DO val.xgad=replacepat(val.xgad,".",",") val.ygad=replacepat(val.ygad,".",",") val.wgad=replacepat(val.wgad,".",",") val.hgad=replacepat(val.hgad,".",",") END IF cleangui THEN DO CALL GT_SetGadgetAttrs(intgad.xgad,win,Null(),GTST_STRING,val.xgad) CALL GT_SetGadgetAttrs(intgad.ygad,win,Null(),GTST_STRING,val.ygad) CALL GT_SetGadgetAttrs(intgad.wgad,win,Null(),GTST_STRING,val.wgad) CALL GT_SetGadgetAttrs(intgad.hgad,win,Null(),GTST_STRING,val.hgad) CALL GT_SetGadgetAttrs(intgad.pgad,win,Null(),GTIN_NUMBER,val.pgad) END GetObjectParams oval "TEXTFLOW FLOWDIST LINECOLOR FILLCOLOR" PARSE VAR RESULT flow fld ovlcol ovfcol IF Left(flow,5)="Right" THEN flow="Right" ELSE IF Left(flow,4)="Left" THEN flow="Left" IF delete="=" THEN DO SelectObject oval Copy END IF delete~="-" & ogrp=" " THEN DeleteObject oval ELSE IF doresize THEN SetObjectCoords oval x+rx*(1-resizex) y+ry*(1-resizey) rx*resizex*2 ry*resizey*2 ovalscanned=1 END IF oval~=0 THEN DO GetPageSetup "WIDTH" "HEIGHT" PARSE VAR RESULT pagew pageh rx=ovalw/2 ry=ovalh/2 xm=Min(ovalx,pagew)+rx ym=Min(ovaly,pageh)+ry page=ovalp END IF ~ovalscanned THEN DO GetOvalPrefs "TEXTFLOW FLOWDIST LINECOLOR FILLCOLOR" PARSE VAR RESULT flow fld ovlcol ovfcol IF Left(flow,5)="Right" THEN flow="Right" ELSE IF Left(flow,4)="Left" THEN flow="Left" orot=0 END IF fillcol THEN ovcol=ovfcol ELSE ovcol=ovlcol TextBlockPrefs "TEXTFLOW" flow "FLOWDIST" fld IF ~resetcol THEN TextBlockTypePrefs "COLOR" ovcol RETURN text: usesheet=alen>0 & attr IF ~(txtrescan | dirtysize | (sheetused ^ usesheet) | newattr) THEN RETURN DO i=1 TO len x=SubStr(text,i,1) IF usesheet THEN DO attrn=(i-1)//alen+1 TextBlockTypePrefs afont.attrn IF resetcol THEN TextBlockTypePrefs aspecs.attrn acolour.attrn ELSE TextBlockTypePrefs aspecs.attrn END ELSE DO j=i-1 IF font.i~=font.j THEN TextBlockTypePrefs font.i IF resetcol & (colour.i~=colour.j) THEN TextBlockTypePrefs specs.i colour.i ELSE IF specs.i~=specs.j THEN TextBlockTypePrefs specs.i END IF Verify(x,'";= ',"M") THEN x='"'||x||'"' DrawTextBlock page xm ym x obj.i=RESULT objs=objs+1 IF check.mrel THEN Redraw GetObjectCoords PARSE VAR RESULT x x x objw.objs objh.objs IF quickmessy() THEN DO CALL remobjs dirtysize=1 oldlen=0 oldobjs=0 RETURN END END sheetused=usesheet dirtysize=0 redrawchars=0 RETURN scan: IF ~(txtrescan | dirtytext) | len=0 THEN RETURN IF txt>0 THEN DO redrawchars=0 GetObjectTypeSpecs txt "SIZE LEADING WIDTH OBLIQUE POSITION CASE STYLE COLOR FONT" PARSE VAR RESULT tsize tlead twid tobl tpos tcase tstyl tcol tfont prfs="SIZE" tsize "LEADING" tlead "WIDTH" twid "OBLIQUE" tobl "POSITION" tpos "CASE" tcase "STYLE" tstyl colourp="COLOR" tcol IF Left(tfont,1)~=" " THEN tfont=" "||tfont fontp="FONT"||tfont GetObjectRotation txt txtrot=RESULT IF delete="+" THEN DeleteObject txt IF Right(rrot,1)=" " THEN rrot=txtrot virtualtext=0 DO i=1 TO len specs.i=prfs font.i=fontp colour.i=colourp END END ELSE IF virtualtext THEN DO i=1 TO len specs.i=defspecs font.i=deffont colour.i=defcolour END ELSE IF text="" | dirtytext THEN DO text="" DO i=1 TO len Extract x=rembad(RESULT) text=text||x Cursor "RIGHT" specs.i=gettexttypespecs() Status "FONTNAME" font.i="FONT" RESULT Status "FONTCOLOR" colour.i="COLOR" RESULT IF quickmessy() THEN DO CALL remobjs oldlen=0 dirtytext=1 oldobjs=0 RETURN END END MoveToPara para 0 val.tgad=Left(text,Min(len.tgad,Length(text))) IF cleangui THEN CALL GT_SetGadgetAttrs(intgad.tgad,win,Null(),GTST_STRING,val.tgad) END dirtytext=0 IF text~="" THEN DO IF C2X(Right(text,1))="0A" THEN DO len=len-1 text=Left(text,len) END text=rembad(text) old=val.tgad val.tgad=Left(text,Min(len.tgad,Length(text))) IF cleangui & val.tgad~=old THEN CALL GT_SetGadgetAttrs(intgad.tgad,win,Null(),GTST_STRING,val.tgad) END RETURN initwrap: txtw=0 wnr=1 wordbeg=1 wordw=0 IF wordmd THEN DO wn=1 whi.wn=0 DO n=1 TO len whi.wn=Max(objh.n,whi.wn) IF SubStr(text,n,1)=" " | n=len THEN DO txtw=txtw+whi.wn wn=wn+1 whi.wn=0 END END END ELSE DO n=1 TO len txtw=txtw+objw.n END PI=3.141593 deg2rad=PI/180 smin=0.1 rx=Max(rx,smin) ry=Max(ry,smin) sizerad=ssize*deg2rad angstep=sizerad/txtw IF doresize THEN angstep=angstep/resize IF absstart THEN angstart=start*deg2rad ELSE angstart=(ssize-360+start*2)/2*deg2rad adone=angstart flip=Sign(ssize) ssize=ssize<0 fr=0 IF dordim THEN DO fr=(1-Abs(rdim)/100)/sizerad*Sign(rdim) IF rdim<0 THEN fr0=Abs(rdim)/100 ELSE fr0=1 END ELSE qr=1 IF dohdim THEN DO fh=(1-Abs(hdim)/100)/sizerad*Sign(hdim) IF hdim<0 THEN fh0=Abs(hdim)/100 ELSE fh0=1 END ELSE qh=1 wdone=0 o=0 rxx=rx ryy=ry IF doresize THEN DO rxx=rxx*resizex ryy=ryy*resizey END sobjs=0 IF titlemd THEN DO CALL remobjs redrawchars=1 END resetprefs=redrawchars | shadow recalcchar=resetprefs | wordmd usesheet=(alen>0) & attr RETURN wrap: CALL initwrap DO n=1 TO len IF recalcchar THEN DO char=SubStr(text,n,1) IF Verify(char,'";= ',"M") THEN char='"'||char||'"' END cw=objw.n ch=objh.n o=obj.n IF charmd THEN DO CALL position x=rxx*Sin(f)*qr-cw/2 y=ryy*Cos(f)*qr IF ~check.mrel THEN y=y-ch/2 END IF resetprefs THEN DO IF usesheet THEN DO attrn=(n-1)//alen+1 TextBlockTypePrefs afont.attrn IF resetcol THEN TextBlockTypePrefs aspecs.attrn acolour.attrn ELSE TextBlockTypePrefs aspecs.attrn END ELSE DO m=n-1 IF font.n~=font.m THEN TextBlockTypePrefs font.n IF resetcol & (colour.n~=colour.m | shadow) THEN TextBlockTypePrefs specs.n colour.n ELSE IF specs.n~=specs.m THEN TextBlockTypePrefs specs.n END END IF titlemd THEN DO PARSE VAR specs.n "WIDTH" l l=Word(l,1)*cw/objw.n i=crot+45 k=(i-i//90)//360 j=45-i//360+k i=X2D(SubStr(obl,Abs(j)+1,1)) crot=(360+k-Sign(j)*SubStr(obrot,i+i+1,2))//360 TextBlockTypePrefs "OBLIQUE" Trunc(10*i*Sign(j)/Sqrt(l)+0.5) END IF wordmd THEN DO x=wordw y=(whi.wnr-objh.n)/2 wordw=wordw+objw.n crot=0 END IF redrawchars THEN DO DrawTextBlock page x+xm y+ym char obj.n=RESULT objs=objs+1 IF check.mrel THEN Redraw o=obj.n IF cw~=objw.n | ch~=objh.n THEN SetObjectCoords o page x+xm y+ym cw ch END ELSE SetObjectCoords o page x+xm y+ym cw ch SetObjectRotation o crot IF shadow THEN DO TextBlockTypePrefs "COLOR" ovcol DrawTextBlock page x+xm+rx/10 y+ym+ry/10 char sobj.n=RESULT sobjs=sobjs+1 IF check.mrel THEN Redraw IF cw~=objw.n | ch~=objh.n THEN SetObjectCoords sobj.n page x+xm+rx/10 y+ym+ry/10 cw ch SetObjectRotation sobj.n crot END IF wordmd THEN IF char='" "' | n=len THEN CALL endofword IF quickmessy() THEN DO CALL remobjs RETURN END END RETURN position: IF doresize THEN DO cw=cw*resize ch=ch*resize END f=angstart-angstep*(wdone+cw/2) wdone=wdone+cw IF dordim THEN qr=fr0+fr*(f-angstart) IF dohdim THEN DO qh=fh0+fh*(f-angstart) ch=Max(ch*qh,smin) cw=Max(cw*qh,smin) END IF doadj THEN IF adjust=4 THEN DO asize=1.1*cw/radius(adone,rxx,ryy,qr) f=adone-asize/2*flip adone=adone-asize*flip END ELSE DO carc=radius(f,rxx,ryy,qr)*angstep/qr IF adjust=1 THEN ch=ch*carc IF adjust=3 THEN ch=ch/Sqrt(carc) cw=cw*carc END IF norrot THEN crot=720-Trunc(Atan(ryy/rxx*Tan(f))/PI*180)+180*((Cos(f)>0)+ssize)+drot ELSE DO IF dodrot & n=1 THEN rrot=720-Trunc(Atan(ryy/rxx*Tan(f))/PI*180)+180*((Cos(f)>0)+ssize) crot=rrot+deltarot*(n-1)//360+360 END crot=crot//360 RETURN endofword: cw=whi.wnr ch=1 CALL position x=rxx*Sin(f)*qr-wordw/2 y=ryy*Cos(f)*qr-whi.wnr x=x+wordoff*wordw/2*Sin(crot*deg2rad) y=y-wordoff*wordw/2*Cos(crot*deg2rad) crot=(crot+270)//360 IF shadow THEN DO SelectObject DO i=wordbeg TO n SelectObject sobj.i "MULTIPLE" END Group CurrentObject wsobj.wnr=RESULT GetObjectCoords SetObjectCoords wsobj.wnr page x+xm+rx/10 y+ym+ry/10 Word(RESULT,4)*ch Word(RESULT,5)*cw/whi.wnr SetObjectRotation wsobj.wnr crot END SelectObject DO i=wordbeg TO n SelectObject obj.i "MULTIPLE" END Group CurrentObject wobj.wnr=RESULT GetObjectCoords SetObjectCoords wobj.wnr page x+xm y+ym Word(RESULT,4)*ch Word(RESULT,5)*cw/whi.wnr SetObjectRotation wobj.wnr crot wordbeg=n+1 wnr=wnr+1 wordw=0 RETURN group: IF ~ovalrescan & ogrp~=" " THEN DO DrawOval ovalp ovalx ovaly ovalw ovalh oval=RESULT ovalrescan=1 Redraw END IF ovalrescan THEN DO IF ogrp="-" THEN DO SelectObject oval SetObjectParams oval "LINEWT NONE FILL TRANSPARENT" END IF orot~=0 & delete="-" & ogrp=" " THEN SetObjectRotation oval orot END SelectObject IF wordmd THEN DO n=1 TO wnr-1 SelectObject wobj.n "MULTIPLE" END ELSE DO n=1 TO objs SelectObject obj.n "MULTIPLE" END Group i=RESULT IF ogrp~=" " THEN DO SelectObject oval "MULTIPLE" Group END objs=0 IF orot~=0 THEN SetObjectRotation 0 orot IF shadow THEN DO SelectObject IF wordmd THEN DO n=1 TO wnr-1 SelectObject wsobj.n "MULTIPLE" END ELSE DO n=1 TO sobjs SelectObject sobj.n "MULTIPLE" END Group sobjs=0 IF orot~=0 THEN SetObjectRotation 0 orot ObjectToBack 0 END Redraw RETURN bye: PARSE ARG errnr errtrap=-2 IF errnr=0 & lockcnt>0 THEN RETURN IF stilltoreply THEN CALL Reply(replymsg,10) IF catalog~=0 THEN CALL CloseCatalog(catalog) CALL resetprefs CALL guiclean CALL remobjs EXIT errnr RETURN remobjs: IF objs>0 THEN DO IF wordmd THEN DO n=1 TO wnr-1 SelectObject wobj.n UnGroup END SelectObject DO n=1 TO objs SelectObject obj.n "MULTIPLE" END Group DeleteObject objs=0 END IF sobjs>0 THEN DO SelectObject IF wordmd THEN DO n=1 TO wnr-1 SelectObject wsobj.n UnGroup END DO n=1 TO sobjs SelectObject sobj.n "MULTIPLE" END Group DeleteObject sobjs=0 END RETURN resetprefs: IF deci~="" THEN DocItemPrefs "DECIMAL PERIOD" IF defprfs~="" THEN TextBlockPrefs defprfs IF defspecs~="" | defcolour~="" THEN TextBlockTypePrefs defspecs defcolour IF deffont~="" THEN TextBlockTypePrefs deffont IF deci~="" THEN DocItemPrefs "DECIMAL" deci RETURN loaddef: ARG where CALL loadtemp IF where>0 THEN DO ok=0 DO i=where TO 3-where BY 3-where*2 UNTIL ok IF preff.i~="" THEN DO ok=Open(prefs,preff.i,"R") IF ok THEN DO default=ReadCh(prefs,prefsize+6) CALL Close(prefs) END END END END ELSE default="" IF Length(default)~=prefsize+6 | Left(default,6)~=prefsid | C2D(SubStr(default,5,2))~=prefsize THEN default="" IF default="" THEN DO winx=defwinx winy=defwiny DO id=1 TO agads check.id=defchk.id cycle.id=defcyc.id val.id=defval.id END DO id=menuoff+1 TO menuoff+mchks check.id=defchk.id END DO id=agads+1 TO agads+sgads IF gtype.id=0 THEN val.id=1 ELSE val.id="" END END ELSE DO winx=C2D(SubStr(default,7,2)) winy=C2D(SubStr(default,9,2)) DO id=1 TO agads i=id*4 check.id=C2D(SubStr(default,i+7,1))~=0 cycle.id=Min(Max(C2D(SubStr(default,i+8,1)),0),Abs(labs.id)) val.id=Min(Max(C2D(SubStr(default,i+9,2)),0),9999) END DO id=menuoff+1 TO menuoff+mchks check.id=C2D(SubStr(default,id+agads*4-menuoff+10,1))~=0 END END CALL updategadgets RETURN savedef: ARG where CALL savetemp winx=GETVALUE(win,4,2,"N") winy=GETVALUE(win,6,2,"N") default=prefsid||D2C(winx,2)||D2C(winy,2) DO id=1 TO agads default=default||D2C(check.id,1)||D2C(cycle.id,1)||D2C(val.id,2) END DO id=menuoff+1 TO menuoff+mchks default=default||D2C(check.id,1) END DO i=1 TO where IF preff.i~="" THEN DO ok=Open(prefs,preff.i,"W") IF ok THEN DO CALL WriteCh(prefs,default) CALL Close(prefs) END END END RETURN loadtemp: IF tempsize=0 THEN RETURN ok=Open(prefs,temp,"R") IF ok THEN DO default=ReadCh(prefs,tempsize) i=1 IF Length(default)=tempsize THEN DO id=agads+1 TO agads+sgads val.id=replacepat(SubStr(default,i,len.id),D2C(0),"") i=i+len.id END CALL Close(prefs) END RETURN savetemp: IF tempsize=0 THEN RETURN ok=Open(prefs,temp,"W") IF ok THEN DO default="" DO id=agads+1 TO agads+sgads default=default||Left(val.id,len.id,D2C(0)) END CALL WriteCh(prefs,default) CALL Close(prefs) END RETURN updategadgets: IF ~cleangui THEN RETURN DO id=1 TO agads IF labs.id>=0 THEN CALL GT_SetGadgetAttrs(checkgad.id,win,Null(),GTCB_CHECKED,check.id) IF labs.id~=0 THEN CALL GT_SetGadgetAttrs(cyclegad.id,win,Null(),GTCY_ACTIVE,cycle.id) IF labs.id>0 THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTIN_NUMBER,val.id) END DO id=agads+1 TO agads+sgads IF gtype.id>0 THEN CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTST_STRING,val.id) ELSE CALL GT_SetGadgetAttrs(intgad.id,win,Null(),GTIN_NUMBER,val.id) END CALL ClearMenuStrip(win) item=GETVALUE(menu,18,4,"P") DO n=menuoff+1 TO menuoff+mchks flags=C2D(B2C(BitAnd(C2B(D2C(GETVALUE(item,12,2,"N"),2)),"1111111011111111")))+CHECKED*check.n CALL SETVALUE(item,12,2,"N",flags,0) item=GETVALUE(item,0,4,"P") END CALL ResetMenuStrip(win,menu) RETURN newdoc: IF portok THEN DO Status "FILENAME" doc=RESULT WinToFront END ELSE doc="???" IF doc="" THEN doc=unnamed wintitle=replacepat(wtitle,"@f",doc) scrtitle=replacepat(stitle,"@f",doc) IF cleangui THEN DO CALL SetWindowTitles(win,wintitle,scrtitle) IF ~windowpos THEN CALL WindowToFront(win) CALL ActivateWindow(win) END RETURN SYNTAX: et=ErrorText(RC) ERROR: err=RC line=SIGL IF errtrap=-1 THEN CALL bye(err) IF errtrap=-2 THEN EXIT err IF err=errtrap THEN DO errtrap=0 i=resume DROP resume trapped=1 SIGNAL VALUE i END RESUME: errtrap=-1 IF et="" THEN et=fwerrtext.err CALL message(err,replacepat(replacepat(replacepat(replacepat(errtext,"@n",err),"@l",line),"@t",et),"@s",SourceLine(line))) CALL bye(err) RETURN BREAK_C: CALL bye(2) RETURN rembad: PROCEDURE PARSE ARG t bad=XRange("00"x,"1F"x)||XRange("7F"x,"A0"x) i=Verify(t,bad,"m") l=Length(t) DO WHILE i>0 t=Left(t,i-1) Right(t,l-i) i=Verify(t,bad,"m") END RETURN t replacepat: PROCEDURE PARSE ARG str,pat,replc p=Pos(pat,str) DO WHILE p>0 str=Left(str,p-1)||replc||SubStr(str,p+Length(pat)) p=Pos(pat,str) END RETURN str gettexttypespecs: PROCEDURE Status "FONTSIZE" p="SIZE" RESULT Status "FONTWIDTH" p=p "WIDTH" RESULT Status "FONTOBLIQUE" p=p "OBLIQUE" RESULT RETURN p radius: PROCEDURE ARG a,rx,ry,v rx=rx*Cos(a) ry=ry*Sin(a) r=v*Sqrt(rx*rx+ry*ry) RETURN r getshort: PROCEDURE ARG ptr,offset a=GETVALUE(D2C(ptr),offset,2,"N") IF a>32767 THEN a=a-65536 RETURN a xexists: PROCEDURE PARSE ARG file IF Pos(":",file)>0 THEN IF Pos(Upper(Left(file,Pos(":",file))),Upper(ShowList("A",,":")||ShowList("V",,":"))||":")>0 THEN ok=Exists(file) ELSE ok=0 ELSE ok=Exists(file) RETURN ok newchkitem: mchks=mchks+1 chk=mchks+agads+tgads+wgads+sgads PARSE ARG ltxt.chk,mkey.chk,defchk.chk,mnode.chk RETURN chk newitem: macts=macts+1 nr=macts+mchks+agads+tgads+wgads+sgads PARSE ARG ltxt.nr,mkey.nr,mnode.nr RETURN nr newgadget: agads=agads+1 PARSE ARG labs.agads,lkey.agads,defchk.agads,defval.agads,defcyc.agads,gnode.agads,lbound.agads,ubound.agads RETURN agads newstr: sgads=sgads+1 gad=sgads+agads PARSE ARG len.gad,lkey.gad,line.gad,val.gad,gtype.gad,gnode.gad check.gad=0 cycle.gad=0 labs.gad=1 slines=Max(slines,line.gad) RETURN gad newbutton: tgads=tgads+1 gad=tgads+agads+sgads PARSE ARG ltxt.gad,lkey.gad,lkey2.gad,gnode.gad RETURN gad newkey: wgads=wgads+1 gad=agads+tgads+wgads+sgads PARSE ARG lkey.gad,gnode.gad RETURN gad checksyntax: PARSE ARG par.1,par.2,par.3 ok=1 DO i=1 TO 3 WHILE par.i~="" IF par.i=Upper(par.i) THEN INTERPRET "ar.i="||ar.i ok=ok & Datatype(ar.i,par.i) END RETURN ok message: PARSE ARG xiterr,msgtxt,buttxt,titletxt IF msgtxt="" THEN RETURN 0 IF buttxt="" THEN buttxt=stdbut IF titletxt="" THEN titletxt=wintitle IF lib.reqtools THEN DO resume="BACKMSG" errtrap=14 button=RTEZRequest(replacepat(msgtxt,"|","0A"x),buttxt,titletxt) END BACKMSG: IF trapped THEN DO trapped=0 lib.reqtools=0 END IF ~lib.reqtools THEN IF lib.apig & cleangui & win~="00000000"x THEN button=EasyRequest(win,titletxt,replacepat(msgtxt,"|","0A"x),buttxt,Null(),0,0) ELSE SAY replacepat(msgtxt,"|","0A"x) IF xiterr>0 THEN CALL bye(xiterr) RETURN button