This is rasmol.c in view mode; [Download] [Up]
/* rasmol.c * RasMol2 Molecular Graphics * Roger Sayle, August 1995 * Version 2.6 */ #ifndef sun386 #include <stdlib.h> #endif #include <signal.h> #include <stdio.h> #include <math.h> #define RASMOL #include "rasmol.h" #include "graphics.h" #include "molecule.h" #include "infile.h" #include "abstree.h" #include "transfor.h" #include "command.h" #include "render.h" #include "repres.h" #include "pixutils.h" #include "outfile.h" #ifdef TERMIOS #include <sys/types.h> #include <sys/time.h> #ifdef NEXT #define __FreeBSD__ #endif #ifdef esv #include <sysv/sys/termio.h> #else #ifdef __FreeBSD__ #include <sys/ioctl.h> #include <sys/termios.h> #define TCSETAW TIOCSETAW #define TCGETA TIOCGETA #else #ifdef _CONVEX_SOURCE #include <sys/ioctl.h> #include "/usr/sys/base/h/ioctl.h" #define TCSETAW TIOCSETAW #define TCGETA TIOCGETA #else #include <sys/termio.h> #endif /* _CONVEX_SOURCE */ #endif /* __FreeBSD__ */ #endif /* esv */ #ifdef esv #include <sysv/unistd.h> #else #include <unistd.h> #endif #if defined(_SEQUENT_) || defined(_AIX) #include <sys/select.h> #endif #ifdef __sgi /* Avoid 'bzero' Compiler Warnings! */ #include <bstring.h> #endif #endif /* TERMIOS */ #ifdef VMS #include <tt2def.h> #include <iodef.h> #include <starlet.h> #include <string.h> #include <time.h> #endif #ifdef SOCKETS #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #endif #define TwoPi 6.2832 #ifdef VMS static struct { unsigned short size; unsigned short type; char *string; } StdInDesc = { 10, 0, "SYS$INPUT:" }; /* Character Terminator Mask! */ static int StdInMask[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static short StdInBlck[4]; static int StdInMode[3]; static int StdInOrig[3]; static short StdInChan; static int StdInStatus; static char StdInChar; static int StdInFlag; #endif #ifdef TERMIOS #ifdef __FreeBSD__ static struct termios OrigTerm; static struct termios IntrTerm; #else static struct termio OrigTerm; static struct termio IntrTerm; #endif static struct fd_set OrigWaitSet; static struct fd_set WaitSet; static struct timeval TimeOut; static int WaitWidth; static int FileNo; #ifdef SOCKETS /* Supported Protocols */ #define ProtoRasMol 0x01 typedef struct { int protocol; int socket; } IPCConv; #define MaxConvNum 8 static IPCConv ConvData[MaxConvNum]; static int ConvCount; static int UseSockets; static int SocketNo; #endif /* SOCKETS */ #endif /* TERMIOS */ static char *FileNamePtr; static char *ScriptNamePtr; static int LabelOptFlag; static int FileFormat; static int ProfCount; static int LexState; /* Function Prototype */ #ifdef FUNCPROTO int HandleEvents( int ); #else int HandleEvents(); #endif int ProcessCommand(); void RasMolExit(); /* Either stdout or stderr */ #define OutFp stdout #ifdef APP void WriteChar( ch ) char ch; { NXWriteChar( ch ); } void WriteString( ptr ) char *ptr; { NXWriteString( ptr ); } #else void WriteChar( ch ) char ch; { putc(ch,OutFp); } void WriteString( ptr ) char *ptr; { fputs(ptr,OutFp); } #endif static void ResetTerminal() { #ifdef SOCKETS register int i; #endif #ifdef TERMIOS if( isatty(FileNo) ) ioctl(FileNo, TCSETAW, &OrigTerm); #endif #ifdef SOCKETS if( UseSockets ) { close(SocketNo); for( i=0; i<MaxConvNum; i++ ) if( ConvData[i].protocol ) close(ConvData[i].socket); } #endif #ifdef VMS StdInFlag = False; if( StdInStatus & 0x01 ) sys$cancel(StdInChan); sys$qiow( 0, StdInChan, IO$_SETMODE, 0, 0, 0, StdInOrig, 12, 0, 0, 0, 0 ); #endif } void RasMolExit() { WriteChar('\n'); if( CommandActive ) WriteChar('\n'); if( Interactive ) CloseDisplay(); ResetTerminal(); exit(0); } void RasMolFatalExit( msg ) char *msg; { WriteChar('\n'); WriteString(msg); WriteChar('\n'); WriteChar(0x07); if( Interactive ) CloseDisplay(); ResetTerminal(); exit(1); } #ifdef VMS static int StdInASTEvent() { register int ch; register int i; if( !StdInFlag ) return( False ); if( StdInBlck[0] & 0x01 ) { if( StdInBlck[1] ) { if( (StdInChar==0x03) || (StdInChar==0x1a) ) RasMolFatalExit("*** Quit ***"); if( LexState == 0 ) { if( StdInChar == 0x1b ) { LexState = 1; ch = 0; } else ch = StdInChar; } else if( LexState == 1 ) { if( StdInChar=='[' ) { LexState = 2; ch = 0; } else if( StdInChar=='O' ) { LexState = 3; ch = 0; } else if( StdInChar != 0x1b ) { LexState = 0; ch = StdInChar; } else ch = 0; } else /* LexState == 2 or 3 */ { LexState = 0; switch( StdInChar ) { case('A'): ch = 0x10; break; case('B'): ch = 0x0e; break; case('C'): ch = 0x06; break; case('D'): ch = 0x02; break; default: if( LexState==2 ) { ProcessCharacter('['); } else ProcessCharacter('O'); if( StdInChar == 0x1b ) { LexState = 1; ch = 0; } else ch = StdInChar; } } } else ch = '\n'; if( ch && ProcessCharacter(ch) ) { if( ProcessCommand() ) RasMolExit(); if( !CommandActive ) ResetCommandLine(0); } } /* Queue an Asynchronous I/O Request */ StdInStatus = sys$qio( 0, StdInChan, IO$_READVBLK|IO$M_NOECHO, StdInBlck, StdInASTEvent, 0, &StdInChar, 1, 0, StdInMask, 0, 0); return( True ); } #endif /* VMS */ #ifdef SOCKETS static int OpenSocket() { struct sockaddr_in addr; register int i; UseSockets = False; SocketNo = socket(AF_INET, SOCK_STREAM, 0); if( SocketNo < 0 ) return( False ); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(21069); if( bind(SocketNo, (struct sockaddr*)&addr, sizeof(addr)) ) { close(SocketNo); return( False ); } UseSockets = True; for( i=0; i<MaxConvNum; i++ ) ConvData[i].protocol = 0; listen( SocketNo, 5 ); return( True ); } static int OpenConnection( socket ) int socket; { register int i; for( i=0; i<MaxConvNum; i++ ) if( !ConvData[i].protocol ) { FD_SET(socket,&OrigWaitSet); if( socket >= WaitWidth ) WaitWidth = socket+1; ConvData[i].protocol = ProtoRasMol; ConvData[i].socket = socket; return( True ); } close( socket ); return( False ); } static void CloseConnection( conv ) int conv; { FD_CLR(ConvData[conv].socket,&OrigWaitSet); close( ConvData[conv].socket ); ConvData[conv].protocol = 0; } static void HandleSocketData( conv ) int conv; { register char *src,*dst; register int result; register int ch,len; char buffer[4097]; len = read( ConvData[conv].socket, buffer, 4096 ); if( len > 0 ) { buffer[len] = '\0'; src = dst = buffer; while( (ch = *src++) ) if( (ch>=' ') && (ch<='~') ) *dst++ = ch; *dst = '\0'; result = ExecuteIPCCommand(buffer); if( result == 2 ) RasMolExit(); } else CloseConnection( conv ); } #endif /* SOCKETS */ static void InitTerminal(sockets) int sockets; { #ifdef TERMIOS register int i; #endif #ifdef SIGTTIN signal(SIGTTIN,SIG_IGN); #endif #ifdef SIGTTOU signal(SIGTTOU,SIG_IGN); #endif #ifdef TERMIOS FileNo = fileno(stdin); FD_ZERO(&OrigWaitSet); FD_SET(FileNo,&OrigWaitSet); WaitWidth = FileNo+1; #ifdef SOCKETS OpenSocket(); if( UseSockets ) { FD_SET(SocketNo,&OrigWaitSet); if( SocketNo >= WaitWidth ) WaitWidth = SocketNo+1; } #endif for( i=0; i<32; i++ ) if( sockets & (1<<i) ) { if( i >= WaitWidth ) WaitWidth = i+1; FD_SET(i,&OrigWaitSet); } if( isatty(FileNo) ) { ioctl(FileNo, TCGETA, &OrigTerm); IntrTerm = OrigTerm; IntrTerm.c_iflag |= IGNBRK|IGNPAR; IntrTerm.c_iflag &= ~(BRKINT|PARMRK|INPCK|IXON|IXOFF); IntrTerm.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHOK|ECHONL|NOFLSH); IntrTerm.c_lflag |= ISIG; IntrTerm.c_cc[VMIN] = 1; IntrTerm.c_cc[VTIME] = 0; #ifdef VSUSP /* Disable ^Z */ IntrTerm.c_cc[VSUSP] = 0; #endif ioctl(FileNo, TCSETAW, &IntrTerm); } #endif /* TERMIOS */ #ifdef VMS /* Associate "SYS$INPUT" with channel StdInChan! */ StdInStatus = sys$assign(&StdInDesc, &StdInChan, 0, 0, 0); if( StdInStatus & 0x01 ) { StdInFlag = True; /* Determine Original Terminal Mode */ sys$qiow( 0, StdInChan, IO$_SENSEMODE, 0, 0, 0, StdInOrig, 12, 0, 0, 0, 0 ); StdInMode[0] = StdInOrig[0]; StdInMode[1] = StdInOrig[1]; StdInMode[2] = StdInOrig[2]; /* Select "RAW" Terminal Mode */ StdInMode[2] |= TT2$M_PASTHRU; /* Set Current Terminal Mode */ sys$qiow( 0, StdInChan, IO$_SETMODE, 0, 0, 0, StdInMode, 12, 0, 0, 0, 0 ); if( sockets ) { /* Queue an Asynchronous I/O Request */ StdInStatus = sys$qio( 0, StdInChan, IO$_READVBLK|IO$M_NOECHO, StdInBlck, StdInASTEvent, 0, &StdInChar, 1, 0, StdInMask, 0, 0); } else StdInStatus = False; } else StdInFlag = False; #else /* !VMS */ setbuf(stdin,(char*)NULL); #endif } static int FetchCharacter() { #ifdef TERMIOS register int status; #ifdef SOCKETS register int i; #endif if( Interactive || UseSockets ) do { if( !CommandActive ) ResetCommandLine(0); if( Interactive ) { HandleEvents(False); /* avoid slow response time */ if( !CommandActive ) ResetCommandLine(0); } TimeOut.tv_sec = 1; TimeOut.tv_usec = 0; WaitSet = OrigWaitSet; #ifdef __hpux status = select( WaitWidth, (int*)&WaitSet, (int*)NULL, (int*)NULL, &TimeOut ); #else status = select( WaitWidth, &WaitSet, (struct fd_set*)NULL, (struct fd_set*)NULL, &TimeOut ); #endif #ifdef SOCKETS if( UseSockets ) { if( FD_ISSET(SocketNo,&WaitSet) ) { OpenConnection( accept(SocketNo,0,0) ); } else for( i=0; i<MaxConvNum; i++ ) if( ConvData[i].protocol ) if( FD_ISSET(ConvData[i].socket,&WaitSet) ) HandleSocketData( i ); } #endif } while( (status<1) || !FD_ISSET(FileNo,&WaitSet) ); #endif /* TERMIOS */ if( !CommandActive ) ResetCommandLine(0); #ifdef VMS sys$qiow( 0, StdInChan, IO$_READVBLK|IO$M_NOECHO, StdInBlck, 0, 0, &StdInChar, 1, 0, StdInMask, 0, 0); return( StdInChar ); #else return( getc(stdin) ); #endif } static int ReadCharacter() { register int tmp; register int ch; if( LexState ) { ch = LexState; LexState = 0; return( ch ); } ch = FetchCharacter(); if( ch!=0x1b ) return( ch ); ch = FetchCharacter(); if( (ch!='[') && (ch!='O') ) return( ch ); switch( tmp=FetchCharacter() ) { case('A'): return( 0x10 ); case('B'): return( 0x0e ); case('C'): return( 0x06 ); case('D'): return( 0x02 ); } LexState = tmp; return(ch); } void RasMolSignalExit( i ) int i; { RasMolFatalExit("*** Quit ***"); } static void LoadInitFile() { register char *src,*dst; register FILE *initrc; register char *fname; char fnamebuf[128]; #ifdef VMS fname = "RASMOL.INI"; #else fname = ".rasmolrc"; #endif initrc = fopen(fname,"r"); if( !initrc && (src=(char*)getenv("HOME")) ) { dst = fnamebuf; while( *src ) *dst++ = *src++; #ifndef VMS *dst++ = '/'; #endif src = fname; fname = fnamebuf; while( (*dst++ = *src++) ); initrc = fopen(fname,"r"); } if( !initrc && (src=(char*)getenv("RASMOLPATH")) ) { dst = fnamebuf; while( *src ) *dst++ = *src++; #ifndef VMS *dst++ = '/'; #endif src = "rasmolrc"; fname = fnamebuf; while( (*dst++ = *src++) ); initrc = fopen(fname,"r"); } if( initrc ) LoadScriptFile(initrc,fname); } static void HandleMenu( hand ) int hand; { register int menu; register int item; register int mask; menu = hand>>8; item = hand&0xff; switch( menu ) { case(0): /* File Menu */ switch( item ) { case(1): /* Open */ if( !Database ) ResetCommandLine(2); break; case(2): /* Save As */ if( Database ) ResetCommandLine(4); break; case(3): /* Close */ ZapDatabase(); break; case(5): /* Exit */ RasMolExit(); break; } break; case(1): /* Display Menu */ switch( item ) { case(1): /* Wireframe */ DisableSpacefill(); EnableWireframe(WireFlag,0); SetRibbonStatus(False,0,0); DisableBackbone(); ReDrawFlag |= RFRefresh; break; case(2): /* Backbone */ DisableSpacefill(); DisableWireframe(); SetRibbonStatus(False,0,0); EnableBackbone(CylinderFlag,80); ReDrawFlag |= RFRefresh; break; case(3): /* Sticks */ DisableSpacefill(); if( MainAtomCount<256 ) { EnableWireframe(CylinderFlag,40); } else EnableWireframe(CylinderFlag,80); SetRibbonStatus(False,0,0); ReDrawFlag |= RFRefresh; DisableBackbone(); break; case(4): /* Spheres */ SetVanWaalRadius(); DisableWireframe(); SetRibbonStatus(False,0,0); DisableBackbone(); ReDrawFlag |= RFRefresh; break; case(5): /* Ball & Stick */ SetRadiusValue(120); EnableWireframe(CylinderFlag,40); SetRibbonStatus(False,0,0); DisableBackbone(); ReDrawFlag |= RFRefresh; break; case(6): /* Ribbons */ DisableSpacefill(); DisableWireframe(); SetRibbonStatus(True,RibbonFlag,0); DisableBackbone(); ReDrawFlag |= RFRefresh; break; case(7): /* Strands */ DisableSpacefill(); DisableWireframe(); SetRibbonStatus(True,StrandFlag,0); DisableBackbone(); ReDrawFlag |= RFRefresh; break; case(8): /* Cartoons */ DisableSpacefill(); DisableWireframe(); SetRibbonCartoons(); DisableBackbone(); ReDrawFlag |= RFRefresh; } break; case(2): /* Colours Menu */ switch( item ) { case(1): /* Monochrome */ MonoColourAttrib(255,255,255); ReDrawFlag |= RFColour; break; case(2): /* CPK */ CPKColourAttrib(); ReDrawFlag |= RFColour; break; case(3): /* Shapely */ ShapelyColourAttrib(); ReDrawFlag |= RFColour; break; case(4): /* Group */ ScaleColourAttrib( GroupAttr ); ReDrawFlag |= RFColour; break; case(5): /* Chain */ ScaleColourAttrib( ChainAttr ); ReDrawFlag |= RFColour; break; case(6): /* Temperature */ ScaleColourAttrib( TempAttr ); ReDrawFlag |= RFColour; break; case(7): /* Structure */ StructColourAttrib(); ReDrawFlag |= RFColour; break; case(8): /* User */ UserMaskAttrib(MaskColourFlag); ReDrawFlag |= RFColour; break; } break; case(3): /* Option Menu */ switch( item ) { case(1): /* Slabbing */ ReDrawFlag |= RFRefresh; UseSlabPlane = !UseSlabPlane; if( UseSlabPlane ) UseShadow = False; break; case(2): /* Hydrogens */ mask = NormAtomFlag; if( HetaGroups ) mask |= HeteroFlag; Hydrogens = !Hydrogens; ReDrawFlag |= RFRefresh; if( Hydrogens ) { SelectZone(mask|HydrogenFlag); } else RestrictZone(mask); break; case(3): /* Hetero Atoms */ mask = NormAtomFlag; if( Hydrogens ) mask |= HydrogenFlag; HetaGroups = !HetaGroups; ReDrawFlag |= RFRefresh; if( HetaGroups ) { SelectZone(mask|HeteroFlag); } else RestrictZone(mask); break; case(4): /* Specular */ FakeSpecular = !FakeSpecular; ReDrawFlag |= RFColour; break; case(5): /* Shadows */ ReDrawFlag |= RFRefresh; UseShadow = !UseShadow; if( UseShadow ) { ReviseInvMatrix(); VoxelsClean = False; UseSlabPlane = False; ReAllocBuffers(); } break; case(6): /* Stereo */ if( UseStereo ) { SetStereoMode(False); } else SetStereoMode(True); ReDrawFlag |= RFRefresh; break; case(7): /* Labels */ LabelOptFlag = !LabelOptFlag; DefaultLabels(LabelOptFlag); ReDrawFlag |= RFRefresh; break; } break; case(4): /* Export Menu */ ResetCommandLine(3); StateOption = item; break; case(5): /* Help Menu */ break; } } void RefreshScreen() { if( !UseSlabPlane ) { ReDrawFlag &= ~(RFTransZ|RFSlab|RFPoint); } else ReDrawFlag &= ~(RFTransZ|RFPoint); if( ReDrawFlag ) { if( ReDrawFlag & RFReSize ) ReSizeScreen(); if( ReDrawFlag & RFColour ) { if( Interactive ) ClearImage(); DefineColourMap(); } if( Database ) { if( Interactive ) BeginWait(); if( ReDrawFlag & RFApply ) ApplyTransform(); DrawFrame(); if( Interactive ) { TransferImage(); EndWait(); } } else if( Interactive ) { ClearBuffers(); TransferImage(); } ReDrawFlag = 0; } } void AdviseUpdate( item ) int item; { } int ProcessCommand() { switch(CurState) { case(1): /* RasMol Prompt */ return( ExecuteCommand() ); case(2): /* PDB Filename */ if( *CurLine && FetchFile(FormatPDB,False,CurLine) ) { ReDrawFlag |= RFRefresh | RFColour; if( InfoBondCount < 1 ) { EnableBackbone(CylinderFlag,80); } else EnableWireframe(WireFlag,0); CPKColourAttrib(); } ResetCommandLine(1); break; case(3): /* Export Image Filename */ if( *CurLine ) switch( StateOption ) { case(1): WriteGIFFile(CurLine); break; case(2): WriteEPSFFile(CurLine,True,True); break; case(3): WritePPMFile(CurLine,True); break; case(4): WriteIRISFile(CurLine); break; case(5): WriteRastFile(CurLine,True); break; case(6): WriteBMPFile(CurLine); break; case(7): WritePICTFile(CurLine); break; } ResetCommandLine(1); break; case(4): /* Save Molecule Filename */ if( *CurLine ) SavePDBMolecule(CurLine); ResetCommandLine(1); break; } return( False ); } int HandleEvents( wait ) int wait; { register int result; result = FetchEvent( wait ); while( ReDrawFlag || result ) { if( !result ) { if( ReDrawFlag&RFPoint ) { if( Database ) { if( ReDrawFlag & RFPoint1 ) { PickAtom(True,PointX,PointY); } else PickAtom(False,PointX,PointY); } ReDrawFlag &= ~RFPoint; } if( ReDrawFlag ) RefreshScreen(); } else if( !IsPaused ) HandleMenu( result ); result = FetchEvent( False ); } return( True ); } static void ProfileExecution() { register long start,stop; register Real delta; register int i; delta = TwoPi/ProfCount; printf("Profiling Execution!\n"); start = time((time_t *)NULL); for( i=0; i<ProfCount; i++ ) { DrawFrame(); if( Interactive ) TransferImage(); ReDrawFlag |= RFRotateY; DialValue[1] += delta; /* UpdateScrollBars(); */ ApplyTransform(); } stop = time((time_t *)NULL); fprintf(OutFp,"Execution of %d frames\n",ProfCount); fprintf(OutFp,"Duration = %ld seconds\n",stop-start); RasMolExit(); } static void DisplayUsage() { fputs("usage: rasmol [-nodisplay] [-script scriptfile] ",OutFp); fputs("[[-format] file]\n formats: -pdb -nmrpdb ",OutFp); fputs("-mopac -mdl -mol2 -xyz -alchemy -charmm\n\n",OutFp); exit(1); } #define FORMATOPTMAX 15 static struct { char *ident; int format; } FormatOpt[FORMATOPTMAX] = { { "alchemy", FormatAlchemy }, { "biosym", FormatBiosym }, { "cif", FormatCIF }, { "charmm", FormatCharmm }, { "fdat", FormatFDAT }, { "gaussian", FormatGaussian }, { "macromodel", FormatMacroMod }, { "mdl", FormatMDL }, { "mmdb", FormatMMDB }, { "mol2", FormatMol2 }, { "mopac", FormatMOPAC }, { "nmrpdb", FormatNMRPDB }, { "pdb", FormatPDB }, { "shelx", FormatSHELX }, { "xyz", FormatXYZ } }; static void ProcessOptions(argc,argv) int argc; char *argv[]; { register char *ptr; register int i,j; for( i=1; i<argc; i++ ) { ptr = argv[i]; #ifdef VMS if( (*ptr=='/') || (*ptr=='-') ) #else if( *ptr == '-' ) #endif { ptr++; if( !strcmp(ptr,"nodisplay") ) { Interactive = False; } else if( !strcmp(ptr,"prof") || !strcmp(ptr,"profile") ) { ProfCount = 200; } else if( !strcmp(ptr,"script") ) { if( i != argc-1 ) { ScriptNamePtr = argv[++i]; } else DisplayUsage(); } else if( !strcmp(ptr,"sybyl") ) { FileFormat = FormatMol2; } else if( !strcmp(ptr,"pdbnmr") ) { FileFormat = FormatNMRPDB; #ifdef CEXIOLIB } else if( !strcmp(ptr,"cex") ) { FileFormat = FormatCEX; #endif } else /* File Formats! */ { for( j=0; j<FORMATOPTMAX; j++ ) if( !strcmp(ptr,FormatOpt[j].ident) ) { FileFormat = FormatOpt[j].format; break; } if( j==FORMATOPTMAX ) DisplayUsage(); } } else if( !FileNamePtr ) { FileNamePtr = ptr; } else DisplayUsage(); } } #ifdef APP void ras_init(void) { int argc=1; char *argv[] = {{"rasmol"},NULL}; #else int main(argc,argv) int argc; char *argv[]; { #endif register FILE *fp; register int temp; register char ch; FileNamePtr = NULL; ScriptNamePtr = NULL; FileFormat = FormatPDB; LabelOptFlag = False; Interactive = True; ProfCount = 0; ProcessOptions(argc,argv); ReDrawFlag = 0; temp = Interactive; setbuf(OutFp,(char *)NULL); Interactive = OpenDisplay(XRange, YRange); InitTerminal(Interactive); signal(SIGINT,RasMolSignalExit); WriteString("RasMol Molecular Renderer\n"); WriteString("Roger Sayle, August 1995\n"); WriteString("Version 2.6\n"); #ifdef EIGHTBIT WriteString("[8bit version]\n\n"); #else #ifdef SIXTEENBIT WriteString("[16bit version]\n\n"); #else WriteString("[24bit version]\n\n"); #endif #endif if( !Interactive ) { if( temp ) { WriteString("No suitable display detected!\n"); } else WriteString("Display window disabled!\n"); } InitialiseCommand(); InitialiseTransform(); InitialiseDatabase(); InitialiseRenderer(); InitialisePixUtils(); InitialiseAbstree(); InitialiseOutFile(); InitialiseRepres(); if( ProfCount ) { if( !FileNamePtr || !FetchFile(FileFormat,True,FileNamePtr) ) RasMolFatalExit("Profile Error: Invalid PDB file name!"); ReDrawFlag |= RFRefresh | RFColour; /* SetVanWaalRadius(); */ /* CPKColourAttrib(); */ FakeSpecular = True; ScaleColourAttrib(GroupAttr); SetRibbonStatus(True,RibbonFlag,0); EnableWireframe(WireFlag,0); RefreshScreen(); /* Avoid Pending Events */ if( Interactive ) { FetchEvent(False); if( ReDrawFlag ) RefreshScreen(); } ProfileExecution(); } if( FileNamePtr && FetchFile(FileFormat,True,FileNamePtr) ) { ReDrawFlag |= RFRefresh | RFColour; if( InfoBondCount < 1 ) { EnableBackbone(CylinderFlag,80); } else EnableWireframe(WireFlag,0); CPKColourAttrib(); RefreshScreen(); } LexState = 0; WriteString("Type \"help\" for help!\n"); ResetCommandLine(1); LoadInitFile(); if( ScriptNamePtr ) { if( (fp=fopen(ScriptNamePtr,"r")) ) { LoadScriptFile(fp,ScriptNamePtr); fclose(fp); } else fprintf(OutFp,"Error: File '%s' not found!\n",ScriptNamePtr); } #ifndef APP #ifndef TERMIOS if( Interactive ) { while( HandleEvents(True) ) if( !CommandActive ) ResetCommandLine(0); } else #endif while( True ) { ch = ReadCharacter(); if( ProcessCharacter(ch) ) if( ProcessCommand() ) break; RefreshScreen(); } RasMolExit(); return( 0 ); #endif }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.