Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion GroupsGeneralPHPASPPerlColdFusionFlashHTML, CSS, ScriptsBrowsers

Webmaster Forum / ColdFusion / Advanced Techniques / December 2005



Tip: Looking for answers? Try searching our database.

CFSCRIPT

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
James74 - 01 Dec 2005 16:09 GMT
I'm converting a bunch of Fortran to Coldfusion.  The issue I'm running into is
compatibility.  The person who wrote
the Fortran code used numerous goto tags instead of loops.  I've tried
converting these tags into loops but I'm
running into problems.

Does anyone know if sfscript can use goto tags?
Dan Bracuk - 01 Dec 2005 16:35 GMT
Originally posted by: James74
I'm converting a bunch of Fortran to Coldfusion.  The issue I'm running into
is compatibility.  The person who wrote
the Fortran code used numerous goto tags instead of loops.  I've tried
converting these tags into loops but I'm
running into problems.

Does anyone know if sfscript can use goto tags?

No it can't.

In fortran, go to commands often equate to calling a subroutine or function.  
The cold fusion way of doing this sort of thing is to:

write a separate template and use the cfinclude tag.
write a custom tag
write a user defined function.  These can be put inside components if you want.
James74 - 01 Dec 2005 18:01 GMT
Thanks,

I had a feeling it couldn't because of similar posts.  The code I'm converting
was written so sloppy that I was hoping for an easy way out.  It would be nice
to just rewrite it, but there's little to no documentation and its old (uses
characters from the punch card days).
MikerRoo - 01 Dec 2005 19:37 GMT
Simple "if-then goto's are easily replaced by an if() statement.
Some multiple-referer goto's can be replaced by a function call.

The other common case can be replaced with a pseudo loop like so:

This:
If A GOTO BarfAndBail
Action_A_not

If B GOTO BarfAndBail
Action_B_not

GOTO AllDone

:BarfAndBail
print 'Awe shucks...'
STOP

:AllDone
RETURN

Becomes This:
bItsAllRight    = true;

while (bItsAllRight)    //-- Pseudo loop for code ease
{
    If (A)
    {
        bItsAllRight    = false;
        break;
    }
    Action_A_not ();    //-- Or list of statements

    If (B)
    {
        bItsAllRight    = false;
        break;
    }
    Action_B_not ();    //-- Or list of statements

    break;  //-- Never really want to loop
}

if (NOT bItsAllRight)
{
    WriteOutput ('That corks it!');
    Abort ('Awe shucks...');       //-- This is a UDF wrapper for cfabort.
}  

Return ();

It is also possible to write a "compiler" that converts the code (I've done it
in past lives) but editor macros can probably greatly speed the conversion with
less fuss.
PaulH *TMM* - 01 Dec 2005 19:13 GMT
> I'm converting a bunch of Fortran to Coldfusion.  The issue I'm running into is
> compatibility.  The person who wrote

can you post a bit of the code? it's been so long that i've seen any
fortran that i'd enjoy looking thru some :-)
James74 - 30 Dec 2005 18:32 GMT
Hi Paul H.  Sorry about the late response.  Here's some FORTRAN code for you:

    SUBROUTINE SSESCR
C
    IMPLICIT INTEGER (A-Z)
C
    INCLUDE 'MOLE.INC'
    INCLUDE 'SUBS.INC'
    INCLUDE 'USE.INC'
    INCLUDE 'TYPE.INC'
    INCLUDE 'DEBUG.INC'
C.................................................
C.... THIS ROUTINE SCREENS FOR POSATMIBLE ATOMS.....
C.... IN THE SUB-GRAPH FROM THE MOLECULE .........
C.................................................
C.... INITIALIZE INTERNAL VARIABLES ..............
C.................................................
    SUBOK=1
    NUMSGP=0
    IF(BUGSSE.EQ.1) TYPE *,NUMSBD,NUMSAT,NUMBND,NUMATM
    IF(NUMATM.LT.NUMSAT) SUBOK=0
    IF(NUMBND.LT.NUMSBD) SUBOK=0
    IF(NUMRNG.LT.NUMSRG) SUBOK=0
    IF(SUBOK.EQ.0) RETURN
    DO I=1,NUMSAT
      POSBEG(I)=0
      POSEND(I)=0
    ENDDO
    NPOSS=0
C..................................................
C... FIND FIRST POSSIBLE FOR ATOM 1 ...............
C..................................................
     DO I=1,NUMSAT
      POSBEG(I)=NPOSS+1
      ISAT=SATM(I)
      ISAD=SATMDG(I)
      ISAC=SATMCH(I)
      DO 100 J=1,NUMATM
         IAAT=ATMTYP(J)
         IAAD=ATMDEG(J)
         IAAC=ATMCHR(J)
C... CHECK FOR WILDCARD HALOGENS......................
         IF(ISAT.EQ.WLDHAL) THEN
            IF(IAAT.EQ.CHLORO) GOTO 1000
            IF(IAAT.EQ.FLORO ) GOTO 1000
            IF(IAAT.EQ.IODO  ) GOTO 1000
            IF(IAAT.EQ.BROMO ) GOTO 1000
         ENDIF
         CHKA=0
         IF(BUGSSE.EQ.1) TYPE *,' IAAT,ISAT=',IAAT,ISAT,IAAD,ISAD,
     *                           iaac,isac
         IF(ISAT.EQ.IAAT) CHKA=1
         IF(CHKA.EQ.0.AND.ISAT.NE.WLDATM) GOTO 100
         CHKD=0
         IF(ISAD.EQ.IAAD) CHKD=1
         IF(ISAT.EQ.TMPRT) CHKD=1
         IF(ISAT.EQ.TMPRTA) CHKD=1
         IF(ISAT.EQ.WLDATM) THEN
            CHKA=1
            CHKD=1
         ENDIF
         CHKC=0
         IF(ISAC.EQ.IAAC .OR. ISAT.EQ.WLDATM) CHKC=1
         CHKC=1    ! turn off charge checking until consequences studied
C         IF(ISAC.EQ.IAAC) CHKC=1
C         IF(ISAC.EQ.0.AND.ISAT.EQ.WLDATM) CHKC=1
C  THE ABOVE LINE WAS CHANGED TO BE MORE SPECIFIC *********
C... CHECK OTHER QUALIFIERS ................
         CHKDA=0
         CHKDI=0
         CHKRA=0
         CHKRI=0
         CHKO=1
         DO 300 L=2,SATMQL(1,I)
            IQL=SATMQL(L,I)
            GOTO (201,202,203,204,205,206,207,
     *                 208,209,210,211,212,213,214,
     *                 215,216,217,218,219,220,221,
     *                 222,223,224) IQL
201            IF(ISAT.EQ.WLDATM.AND.IAAT.EQ.CARBON) CHKRA=1
            CHKRI=1
            GOTO 300

202            IF(ISAT.EQ.WLDATM.AND.IAAT.EQ.OXEGEN) CHKRA=1
            CHKRI=1
            GOTO 300

203            IF(ISAT.EQ.WLDATM.AND.IAAT.EQ.NITRO ) CHKRA=1
            CHKRI=1
            GOTO 300

204            IF(ISAT.EQ.WLDATM.AND.IAAT.EQ.SULFUR) CHKRA=1
            CHKRI=1
            GOTO 300

205            IF(ISAT.EQ.WLDATM.AND.IAAT.EQ.PHOS  ) CHKRA=1
            CHKRI=1
            GOTO 300

206            IF(INRING(J).EQ.0) CHKO=0
            GOTO 300

207            IF(INRING(J).LT.2) CHKO=0
            GOTO 300

208            IF(ISAT.NE.IAAT)  CHKA=1
            GOTO 300

209            IF(INRING(J).NE.0) CHKO=0
            GOTO 300

210            AR=0
            DO JJ=ATMBEG(J),ATMEND(J)
               IF(BNDTY(JJ).EQ.AROMAT) AR=AR+1
            ENDDO
            IF(INRING(J).EQ.0.OR.AR.EQ.0) CHKO=0
            GOTO 300

211            CHKDA=1
            CHKDI=1
            GOTO 300

212            IF (IAAD.EQ.1) CHKDA=1
            CHKDI=1
            GOTO 300

213            IF (IAAD.EQ.2) CHKDA=1
            CHKDI=1
            GOTO 300

214            IF (IAAD.EQ.3) CHKDA=1
            CHKDI=1
            GOTO 300

215            IF (IAAD.EQ.4) CHKDA=1
            CHKDI=1
            GOTO 300

216            CONTINUE
            RN=3
            GOTO 21900

217            CONTINUE
            RN=4
            GOTO 21900

218            CONTINUE
            RN=5
            GOTO 21900

219            CONTINUE
            RN=6
21900            CONTINUE

            IF(INRING(J).EQ.0) THEN
               CHKO=0
               GOTO 300
            ENDIF
            DO LL=1,NUMRNG
               IF(RINGL(LL).EQ.RN) THEN
                  DO LLL=1,RINGL(LL)
                     IF(J.EQ.RING(LLL,LL)) GOTO 300
                  ENDDO
               ENDIF
            ENDDO
            CHKO=0
            GOTO 300

220            CONTINUE
            DO LL=ATMBEG(J),ATMEND(J)
               IF(BNDTY(LL).NE.SINGLE) THEN
                  CHKO=0
                  GOTO 300
               ENDIF
            ENDDO
            GOTO 300

221            CONTINUE
            DO LL=ATMBEG(J),ATMEND(J)
               IF(BNDTY(LL).EQ.DOUBLE) GOTO 300
            ENDDO
            CHKO=0
            GOTO 300

222            CONTINUE
            DO LL=ATMBEG(J),ATMEND(J)
               IF(BNDTY(LL).EQ.AROMAT) THEN
                  CHKO=0
                  GOTO 300
               ENDIF
            ENDDO
            GOTO 300

223            IF (IAAT .EQ. FLORO ) GOTO 298    ! halogens ...
224            IF (IAAT .EQ. CHLORO) GOTO 298 ! ... or halogens less fluorine
            IF (IAAT .EQ. BROMO ) GOTO 298
            IF (IAAT .EQ. IODO  ) GOTO 298
            GOTO 299

298            IF (ISAT .EQ. WLDATM) CHKRA= 1    ! must be a wild card atom
299            CHKRI=1
300            CONTINUE
C.... IS IF IT ATOM IS INCLUDED .........................
         CHKR=1
         IF(CHKRI.EQ.1) CHKR=CHKRA
         IF(CHKDI.EQ.1) CHKD=CHKDA
         IF(BUGSSE.EQ.1) TYPE 333,I,CHKA,CHKD,CHKC,CHKO,CHKR
333         FORMAT(' CHECK:I=',I2,' A,D,C,O,R=',5(I1,X))
         IF(CHKA*CHKD*CHKC*CHKO*CHKR.EQ.0) GOTO 100
C.... ADD IN NEW POSATMIBLIITY ............................
1000         CONTINUE
         NPOSS=NPOSS+1
         POSATM(NPOSS)=J
100         CONTINUE
      POSEND(I)=NPOSS
      IF(POSBEG(I).GT.POSEND(I)) THEN
         IF(BUGSSE.NE.0) TYPE *,' ZAP OUT AT ',I
         SUBOK=0
         RETURN
      ENDIF
      IF(BUGSSE.EQ.1) TYPE 1234,I,POSBEG(I),POSEND(I),
     *          (POSATM(LL),LL=POSBEG(I),POSEND(I))
1234      FORMAT(' I=',I2,' PB(I)=',I3,' PE(I)=',I3,
     *         ' ATT=',25(I2,X))
    ENDDO
C........................................................
C... PRUNE OUT ALL REAL OBVIOUS MISTAKES ................
C........................................................
20000    CONTINUE
    LOPOK=0
    DO FROM=1,NUMSAT
      DO IT=SATMBG(FROM),SATMED(FROM)
         TO=SBNDTO(IT)
         BD=SBNDTY(IT)
         DO IPF=POSBEG(FROM),POSEND(FROM)
            IPFA=POSATM(IPF)
            IF(IPFA.NE.0) THEN
               DO IPT=POSBEG(TO),POSEND(TO)
                  IPTA=POSATM(IPT)
                  IF(IPTA.NE.IPFA) THEN
                     DO 4900 JJ=ATMBEG(IPFA),ATMEND(IPFA)
                        IF(BNDTO(JJ).NE.IPTA) GOTO 4900
                        IF (BD.EQ.WLDBND)  GOTO 5000
                        IF (BNDTY(JJ).NE.BD) GOTO 4900
                        GOTO 5000
4900                        CONTINUE
                     if(bugsse.eq.1) type *,'a1,a2,b1,b2=',
     *                       bndto(jj),ipta,bndty(jj),bd
                  ENDIF
               ENDDO
               IF(BUGSSE.EQ.1) TYPE 5673,FROM,TO,IPF,IPFA,IPT,IPTA
5673               FORMAT(' ZAP IPF;FROM,TO,IPF,IPFA,IPT,IPTA=',10(I3,X))
               POSATM(IPF)=0
               LOPOK=1
5000               CONTINUE
            ENDIF
         ENDDO
      ENDDO
21000      CONTINUE
      IF(BUGSSE.EQ.1) TYPE 5555,FROM,(POSATM(L),
     *                   L=POSBEG(FROM),POSEND(FROM))
5555      FORMAT(' PRUNE:FROM=',I2,' PPOSATM=',20(I2,X))
    ENDDO
C-----------------------------------------------------------
C... COLLECT NON ZERO TERMS  AND RETURN....................
    NPOSS=0
    DO I=1,NUMSAT
      IB=POSBEG(I)
      POSBEG(I)=NPOSS+1
      DO J=IB,POSEND(I)
         IF(POSATM(J).NE.0) THEN
            NPOSS=NPOSS+1
            POSATM(NPOSS)=POSATM(J)
         ENDIF
      ENDDO
      POSEND(I)=NPOSS
      IF(POSBEG(I).GT.POSEND(I)) THEN
         SUBOK=0
         RETURN
      ENDIF
      IF(BUGSSE.EQ.1) TYPE 123,I,(POSATM(L),L=POSBEG(I),POSEND(I))
123      FORMAT(' END OF PRUNE:I=',I2,':',20(I2,X))
    ENDDO
    IF(LOPOK.EQ.1) GOTO 20000
    RETURN
    END
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.