bsp
|
00001 #ifndef _GLOBAL_H_ 00002 #define _GLOBAL_H_ 00003 00004 #include "bsppch.h" 00005 00006 00007 typedef unsigned char uint8; 00008 typedef short int16; 00009 typedef unsigned short uint16; 00010 00011 //these defines are needed early 00012 #define MAX_KEY 64 // kp 00013 #define MAX_VALUE 1024 // kp 00014 #define MAXTOKEN MAX_VALUE 00015 #define MAXCOMTOKEN 1024 00016 00017 #define MAX_MOUSE_EVENT_TYPES 10 00018 #define MAX_EXPORTERS 16 00019 00020 #include "bsphdr.h" 00021 #include "util.h" 00022 #include "tokenizer.h" 00023 #include "qtype.h" 00024 #include "settings.h" 00025 #include "wutil.h" 00026 #include "window.h" 00027 #include "wcontrol.h" 00028 #include "wdialog.h" 00029 #include "dialogs.h" 00030 #include "setbrush.h" 00031 #include "ent.h" 00032 #include "map.h" 00033 #include "eclass.h" 00034 #include "clipper.h" 00035 #include "group.h" 00036 #include "formats.h" 00037 #include "texture.h" 00038 #include "xyview.h" 00039 #include "editwin.h" 00040 #include "keypair.h" 00041 #include "about.h" 00042 #include "bspwin.h" 00043 #include "help.h" 00044 #include "console.h" 00045 #include "monster.h" 00046 #include "surface.h" 00047 #include "commands.h" 00048 #include "menu.h" 00049 #include "res\resource.h" 00050 00051 #pragma warning(disable:4996) 00052 00053 //BSP Window Messages 00054 #define WM_SHORTCUT_CHANGED WM_USER+1 //(0, 0) 00055 00056 //this is for win98 compat 00057 #define OPENFILENAMESTRUCTSIZE OPENFILENAME_SIZE_VERSION_400 //sizeof(OPENFILENAME); 00058 00059 //util 00060 00061 extern char *RemoveTrailingSlash(char *dir); //remove trailing slash from a directory 00062 extern int VerifyPak(Path pakname); // Determines if .pak file is a valid one. 00063 extern void StripExtension (char *path); 00064 extern char *COM_Parse (char *data); 00065 extern unsigned char *file_get_contents(Path filename, int *outlen=0); 00066 extern DWORD expand_path(char *path, char *out, int outsize = MAX_PATH); 00067 extern bool file_exists(char *); 00068 extern bool Bsp_ShellExecute(HWND hwnd,char *op,Path file, char*param, char *start_dir, int show=SW_SHOW); 00069 extern bool SetFocusUnderMouse(HWND hwnd); 00070 extern void CenterWindow(HWND hwnd); 00071 extern char *FixFloatString(char *fstr); // truncate trailing zeroes, 1.0000 -> 1.0 00072 extern void FixOverflow(float& number, float range); 00073 00074 #define LB_3DCOLORS 1 00075 extern HBITMAP load_bitmap(Path filename, int flags); 00076 00077 #define LoopProblem(x) 00078 #ifndef LoopProblem 00079 extern void LoopProblem(char *); // For finding infinite loops. 00080 #endif 00081 extern bool isPowerof2(int num); 00082 extern int nextPowerof2(int num); 00083 extern char *stristr(char *src, char *find); 00084 extern int compare_strings_int_parts(char *string1, char *string2); 00085 extern int snprintf(char *buffer, int count, const char *format, ...); 00086 //extern char *b_strncpy( char *strDest, const char *strSource, size_t count ); 00087 extern void Msgbox(char *msg, ...); 00088 extern void Caption(char *msg, ...); 00089 extern bool GroupParse(Tokenizer *script); 00090 extern void LogFileReset(Path logfile); 00091 extern "C" void sysprintf(char *text, ...); 00092 extern void syserror(char *text, ...); 00093 __declspec(noreturn) 00094 extern void sysfatal(char *error, ...); 00095 extern void ExtractFileBase (char *path, char *dest, int includeExtension); 00096 extern int rint(float i); 00097 00098 extern char com_token[MAXCOMTOKEN]; 00099 00100 typedef struct groupinfo_s 00101 { 00102 char name[64]; 00103 COLORREF color; 00104 int visible; 00105 } groupinfo_t; 00106 00107 typedef struct camerainfo_s 00108 { 00109 float x,y,z; 00110 int roll,pitch,yaw; 00111 } camerainfo_t; 00112 00113 extern void Parse_NextLine(char **text); 00114 extern void Parse_RTrim(char **text); 00115 extern void Parse_LTrim(char **text); 00116 extern void Parse_Trim(char **text); 00117 extern void Parse_EatWS(char **text); 00118 extern int Parse_Quoted(char **text, char *out, int outlen); 00119 extern COLORREF Parse_Color(char *text); 00120 extern int Parse_BSPGroups(char *text); 00121 extern int Parse_BSPGroupInfo(char *text, groupinfo_t *gi); 00122 extern int Parse_BSPFavorites(char *text); 00123 extern int Parse_BSPNextFav(char **text, char *fav, int favlen); 00124 extern int Parse_BSPCameras(char *text); 00125 extern int Parse_BSPCamInfo(char *text, camerainfo_t *ci); 00126 extern int Parse_BSPMapType(char *text); 00127 00128 //bsp 00129 extern void MapChanged(); 00130 extern void BSPHelp(char *, char *); 00131 extern void BSPHelpAdd(char *); 00132 extern void BSPHelpAddV(char *, ...); 00133 extern void ConScrollEnd(); 00134 extern void ConWrite(char *text); 00135 extern void ConWriteV(char *text, ...); 00136 extern void SetCaptionHeight(); 00137 00138 extern TBSPApp *frame; // BSP windows. Main frame 00139 extern TBSPWindow *client; // MDI client. 00140 extern TTextureWindow *texWindow; // Texture browser 00141 extern TXYViewWindow **xyWindow; // 2D View 00142 extern TEditWindow *editWindow; // 3D View 00143 extern EntityView *kpWindow; // Entity Browser 00144 extern TGroupWindow *groupWindow; // Group Browser 00145 extern THelpWindow *helpWindow; // Help Window 00146 extern TMonsterWindow *monsterWindow; // Monster browser 00147 extern TSurfaceWindow *surfaceWindow; // Surface property window. 00148 extern BSPConsole *wconsole; // console window 00149 extern PaletteWindow *palettewindow; // palette viewer 00150 00151 extern map *copymap; 00152 extern int KillAllWindows; 00153 extern RECT EditClip; 00154 extern RECT RenderClip; 00155 extern SIZE EditSize; 00156 extern SIZE RenderSize; 00157 extern int CaptionHeight; 00158 extern HFONT g_hCaptionFont; 00159 00160 extern int normalExit; 00161 extern bool savetoini; 00162 00163 extern vec3_t *CP[2]; // array to hold clipped pts... 00164 extern vec3_t SPoints[CPT]; 00165 extern POINT FSPoints[CPT]; 00166 extern vec3_t *tpts; 00167 namespace Bsp 00168 { 00169 extern int cur, lst; 00170 } 00171 //extern vec3_t **pt; 00172 extern SetBrush **besthits; 00173 extern int numhits; 00174 00175 00176 //bsp2 00177 extern TBSPSplashWindow *splash; // Splash screen 00178 extern bool BSP_Active; // If BSP is not in foreground, disable 00179 extern bool KillAccels; // disable KB accelerators 00180 //extern bool BSP_AutoLoad; 00181 extern int LUMP_NAME_LENGTH; // Q1 texture name len = 16, Q2 = 32 00182 #define LUMP_NAME_LENGTH_MAX 48 // for automatic memory allocation 00183 00184 extern int PALSTEP; 00185 extern int timeRender; 00186 extern DWORD startTime; 00187 extern DWORD endTime; 00188 extern int cColorBits; 00189 extern int cDepthBits; 00190 extern int cTextureAlpha; 00191 extern int singleBuffer; 00192 extern WRebar *rebar; 00193 extern WToolbar **cbars; 00194 extern WStatus *status; 00195 extern void status_ShowOpenMapsMenu(); // map gadget 00196 extern KBSettings *kbset; 00197 extern WImageList imagelist; 00198 00199 extern HINSTANCE hInstance; // app hinstance 00200 extern HMENU hMenu; // main menu handle 00201 extern HACCEL acceltable; // accelerator table 00202 #define ID_REBAR 102223 00203 00204 //status bar parts 00205 #define STATUS_INFO 0 00206 #define STATUS_MODE 1 00207 #define STATUS_HEIGHT 2 00208 #define STATUS_GROUP 3 00209 #define STATUS_POS 4 00210 #define STATUS_DELTA 5 00211 #define STATUS_BOUND 6 00212 #define STATUS_MAP 7 00213 00214 //texture 00215 extern void UpdateTextureTransFlags(face_t *f); 00216 extern int GetPaletteIndex(int pSize, unsigned char *pal, COLORREF color); 00217 extern int BlendPal(int index1, int index2); //TESTING - blends two palette entries to the nearest pal color 00218 extern TColorMap *texColorMap; 00219 extern bool suppress_gets; 00220 extern int GetTextureModeValue(char *md); 00221 00222 00223 //bspui 00224 extern void SplitBaseQuiet(char *path, char *basepath, char *name); 00225 extern void Show_Frame(const char* str, bool notStatusOnly); 00226 extern void SaveArrangement(); 00227 extern bool ProcessMapFile(char *); 00228 extern void MergeMapFile(char *); 00229 extern void SaveMapFile(char *,int); 00230 00231 #define MAX_RECENT 16 00232 extern char recent_files[MAX_RECENT][MAX_PATH]; 00233 extern void InitRecent(); 00234 extern void SaveRecent(); 00235 extern void AddRecent(char *filename); 00236 extern int BuildRecentMenu(HMENU menu); 00237 00238 extern bool redraw_interrupted; // User hit Esc during long screen update. 00239 00240 00241 //bspui2 00242 extern int plugPortal; 00243 extern int leakPtType; 00244 extern vec3_t *aLeakPoints; // leak points... 00245 extern int numLeakPoints; 00246 extern leakPortal_t *aLeakPortals; // leak portals... 00247 extern int numLeakPortals; 00248 extern vec3_t LeakPortalOrigin; 00249 extern leakNode_t *aLeakNode; 00250 00251 //map 00252 extern int snapToGrid(float); 00253 extern int CountWads(char *); 00254 00255 extern char loadName[MAX_PATH]; 00256 extern bool loadMessageGiven; // True if user has been warned of a loading error once 00257 00258 extern int ent_count; 00259 00260 00261 //setbrush 00262 /*#ifdef BSP_MEMMGR // If defined, gather a pool of brushes 00263 extern void InitBrushManager(); // at startup, otherwise allocation is dynamic 00264 extern void CloseBrushManager(); 00265 #endif*/ 00266 //extern SetBrush *AllocBrush(); // Allocates a brush from brush pool 00267 //extern void DestroyBrush(SetBrush *); // Deallocates a brush from brush pool 00268 extern void VectorAdd (vec3_t va, vec3_t vb, vec3_t out); 00269 extern void VectorSubtract (vec3_t va, vec3_t vb, vec3_t out); 00270 extern void VectorCopy (vec3_t in, vec3_t out); 00271 extern float DotProduct(vec3_t, vec3_t); 00272 extern bool VectorCompare (vec3_t v1, vec3_t v2); 00273 extern float VectorLength(vec3_t v); 00274 extern void VectorNormalize (vec3_t v); 00275 extern void VectorCalcNormal(vec3_t a,vec3_t b,vec3_t c, vec3_t out_normal); 00276 extern void VectorScale (vec3_t v, float sc, vec3_t out); 00277 extern void CrossProduct(vec3_t, vec3_t, vec3_t); 00278 extern void SplitBase(char *path, char *basepath, char *name); 00279 extern float TextureAxisFromPlane(plane_t *pln, float *xv, float *yv); 00280 extern void TextureAxisFromPlaneEx(plane_t *pln, vec3_t out[3]); 00281 extern winding_t *CopyWinding (winding_t *w); 00282 extern winding_t *NewWinding (int points); 00283 extern void carve(SetBrush **in); 00284 extern void GetAxes(int ViewType, int *ua, int *va, int *na); 00285 00286 extern Entity *carve_in, *carve_out; 00287 extern vec3_t vec3_origin; 00288 extern map **map_i; 00289 extern bool clipDraw; 00290 //extern bool ignoreBounds; 00291 extern int maxmulticontrolpoints; 00292 extern int multicontrolpoints; 00293 extern float **mcontrolpoints; 00294 extern int numsb; 00295 //extern int callstocarve; 00296 extern float lightaxis[3]; 00297 00298 extern vec3_t region_min, region_max; 00299 extern int numcontrolpoints; 00300 extern float *controlpoints[MAX_FACES*3]; 00301 extern vec3_t sb_translate; 00302 extern vec3_t sb_mins, sb_maxs, sb_ctr; //TODO: kill sb_mins/maxs 00303 extern int BBoxCount; 00304 extern vec3_t sel_x, sel_y, sel_z; 00305 //extern vec3_t sel_org; 00306 extern vec3_t select_min, select_max; 00307 extern float sb_floor_dir, sb_floor_dist; 00308 extern Entity *sb_newowner; 00309 extern bool select_deselect; 00310 //extern vec3_t last_vertex; 00311 00312 //matrix3 00313 extern float angle(float x, float y); 00314 extern void tran3(float tx, float ty, float tz, float A[][4]); 00315 extern void scale3(float sx, float sy, float sz, float A[][4]); 00316 extern void rot3(int m, float th, float A[][4]); 00317 extern void mult3(float A[][4], float B[][4], float C[][4]); 00318 extern void rotate3(float phi, float *b, float *d, float A[4][4]); 00319 extern void transform(float *v, float A[4][4], float *w); 00320 extern void transform2(float x, float y, float z, float A[4][4], float *w); 00321 extern void findQRotate(float Q[4][4],float R[4][4],float *eye,float roll, float pitch, float yaw); 00322 extern void MConcat(float in1[3][3], float in2[3][3], float out[3][3]); 00323 extern void findQ(float Q[4][4],float R[4][4],float *eye,float roll, float pitch, float yaw); 00324 extern void findQ2(float Q[4][4],float *eye,float *lookAt); 00325 extern void findQ3(float Q[4][4],float *eye,float *lookAt); 00326 extern void invert(float A[4][4],float AInv[4][4],int *sing); 00327 //extern int ClipXY(int npts, TRect CR); 00328 extern int FastClipXY(int npts, LPRECT CR); 00329 //extern int FastClipRen(int npts, int rw, int rh); 00330 extern int Z_Clip(int npts, float zmin, float zmax); 00331 //extern int XY_Clip(int npts, vec3_t *TP, TRect CR); 00332 //extern int ClipZPoint(const float *pt, float zmin, float zmax); 00333 //extern int ClipXYPoint(const float *pt, TRect CR); 00334 00335 00336 //render 00337 extern void REN_DrawFlatSpanOutline (int y,int selected); 00338 extern void REN_DrawFlatSpanOutlineSin(int y,int selected); 00339 extern void REN_DrawSpanOutline (int y, int selected); 00340 extern void REN_DrawSpanOutlineSin(int y, int selected); 00341 extern void REN_DrawSpanOutlineNoZ (int y, int selected); 00342 extern void REN_DrawSpanOutlineNoZSin(int y, int selected); 00343 extern void REN_CheckDistanceRasterizeFace(winding_t *w); 00344 extern void REN_CheckClosestSpan (int y); 00345 extern void REN_DrawSpanWire(int y, int selected); 00346 extern void REN_DrawSpanWireHoriz(int y, int selected); 00347 extern void REN_LineDraw(int XStart, int YStart, int XEnd, int YEnd, int selected); 00348 extern void REN_LineDrawZ(float *p1, float *p2, int selected); 00349 extern void REN_DrawSpanWireSin(int y, int selected); 00350 extern void REN_DrawSpanWireHorizSin(int y, int selected); 00351 extern void REN_LineDrawSin(int XStart, int YStart, int XEnd, int YEnd, int selected); 00352 extern void REN_LineDrawZSin(float *p1, float *p2, int selected); 00353 extern void REN_DrawWinding(winding_t *inw, int selected); 00354 extern void REN_DrawLineWinding(winding_t *inw, int selected); 00355 extern void REN_RenderWinding(winding_t *inw, int selected); 00356 extern void REN_RasterizeLineWire (winding_t *w, int selected); 00357 extern void REN_CopyBuffers (float *inz, float *outz, unsigned char *inp, unsigned char *outp); 00358 extern void REN_DrawCameraPoint(float *pt,int selected); 00359 extern bool REN_FindCameraPoint(float *pt, float fudge, int *plot_x, int *plot_y); 00360 extern void REN_BeginCamera(); 00361 extern void REN_ClearBuffers(); 00362 00363 extern bool REN_PointToScreen(float *pt, POINT *outpt); 00364 extern void REN_Draw3DGrid(); 00365 extern void REN_DrawVec(float *pt, COLORREF color); 00366 extern void REN_DrawCameraHandle(float *pt, COLORREF color); 00367 extern void REN_DrawCameraHandleSin(float *pt, unsigned char r, unsigned char g, unsigned char b); 00368 extern void REN_DrawXYFace(face_t *); 00369 extern void REN_DrawCameraFace(face_t *, int); 00370 extern void REN_FindClosestFace(face_t *idpol); 00371 extern void REN_DrawModel(mdl_t *mdl, int selected, float Xrot, float Yrot, float Zrot, 00372 int frame, int Xoffs, int Yoffs, float Zoffs); 00373 extern void REN_RenderModel(mdl_t *mdl, int selected, float Xrot, float Yrot, float Zrot, 00374 int frame, int Xoffs, int Yoffs, float Zoffs, int skinNumber); 00375 extern void REN_DrawModelQ2(dmdl_t *mdl, int selected, float Xrot, float Yrot, float Zrot, 00376 int frame, int Xoffs, int Yoffs, float Zoffs); 00377 extern void REN_RenderModelQ2(dmdl_t *mdl, dskindata_t *skinTex, int selected, float Xrot, float Yrot, float Zrot, 00378 int frame, int Xoffs, int Yoffs, float Zoffs, int skinNumber); 00379 00380 extern void XRotatePoint(float *in, float *out, float c, float s); 00381 extern void YRotatePoint(float *in,float *out,float c, float s); 00382 extern void ZRotatePoint(float *in, float *out, float c, float s); 00383 00384 extern vec3_t r_origin, r_matrix[3]; 00385 extern int t_coloroffset; 00386 extern int t_width, t_height; 00387 extern unsigned char *t_data; 00388 extern float t_widthadd, t_heightadd; 00389 extern int r_width, r_height; 00390 extern float *r_zbuffer; 00391 extern unsigned char *r_picbuffer; 00392 extern vec5_t rightside, leftside, rightstep,leftstep; 00393 extern face_t *r_face; 00394 extern bool r_drawflat; 00395 extern bool r_drawent; 00396 extern bool r_noz; 00397 extern bool r_drawwire; 00398 extern pixel32_t r_flatcolor; 00399 extern pixel32_t r_entitycolor; 00400 //extern int sy[256]; 00401 extern plane_t frustum[5]; 00402 00403 namespace Render 00404 { 00405 extern int clickX, clickY; 00406 } 00407 extern SetBrush *REN_bestBrush; 00408 extern float REN_bestDistance; 00409 extern SetBrush *REN_testBrush; 00410 extern face_t *REN_bestFace; 00411 extern face_t *REN_testFace; 00412 extern SetBrush *REN_curBrush; 00413 00414 //xyview 00415 00416 extern bool glBspRotate; 00417 extern vec3_t xy_eye; // XY eye center point. 00418 extern SetBrush *newbrush; 00419 extern int numEventTypes; 00420 extern int curEventType; 00421 00422 //editwin 00423 00424 extern void glSetFogRange(float fognear, float fogfar); 00425 extern void glSetBackgroundColor(COLORREF color); 00426 extern void glSetFogColor(COLORREF color); 00427 extern void glFogOn(); 00428 extern void glFogOff(); 00429 extern void glShadingOn(); 00430 extern void glShadingOff(); 00431 extern void glLightAmbient(COLORREF color); 00432 extern void glLightColor(COLORREF color); 00433 00434 extern map *glMap; 00435 extern int glLastBoundIndex; 00436 extern bool glSkyboxNotEmpty; 00437 extern int brushCount; 00438 extern vec3_t matrix[3]; 00439 00440 extern char EventTypes3d[MAX_MOUSE_EVENT_TYPES] [32]; // Mouse customizations 00441 extern int numEventTypes3d; 00442 extern int curEventType3d; 00443 extern SIZE fovsz; 00444 extern bool mouse_is_navigating; 00445 00446 //clipper 00447 extern bool splitSelect; 00448 00449 00450 //hits 00451 extern void RemoveHitBrush(SetBrush *b); 00452 extern int GetHitIndex(SetBrush *b); 00453 extern void ClearHits(); 00454 extern void NextHitBrush(); 00455 extern void HitRestore(); 00456 extern void SelectHitBrush(int index); 00457 extern void SelectAllHit(); 00458 extern void PreviousHitBrush(); 00459 extern void AddHitBrush(SetBrush *b); 00460 00461 extern int *hitSelected; // Trace results for clicks in 2d view. 00462 00463 00464 //eclass 00465 extern EntityClassList *entity_classes_i; // Entity browser. 00466 00467 00468 //ent 00469 extern bool wasBad; 00470 00471 00472 //bspresp 00473 extern char * GetVKeyName(int id); 00474 extern int GetVKey(char *vkey); 00475 00476 00477 //glutil 00478 extern void glShadingOn(); 00479 extern void glShadingOff(); 00480 extern void glAddTexture(int name,int width,int height,GLuint* pic,int bits=0,int wrap=GL_REPEAT); 00481 extern void glReloadBSPSettings(); 00482 extern void glBeginAddToSkybox(); 00483 extern void glEndAddToSkybox(); 00484 extern void glRenderSkybox(); 00485 extern void glUnloadSkybox(); 00486 extern void glReloadSkybox(); 00487 00488 //lua 00489 //extern void LUA_Create(); 00490 //extern void LUA_Destroy(); 00491 //extern void LUA_Exec(char *lua_code); 00492 00493 //angel 00494 //extern void AS_Create(); 00495 //extern void AS_Exec(char *scriptcode); 00496 //extern void AS_Destroy(); 00497 00498 //squirrel! 00499 extern void SQ_Create(); 00500 extern void SQ_Destroy(); 00501 extern void SQ_Exec(char *scriptcode); 00502 00503 //global const 00504 00505 //max dimensions for auto rendering size 00506 const int AUTO_MAX_W = 1280; 00507 const int AUTO_MAX_H = 1024; 00508 00509 #define BAD_SCALE 0.0001 00510 00511 #define DEG2RAD(x) (((float)(x))*M_PI/180.0f) 00512 #define RAD2DEG(x) ((int)(180.0f*((float)(x))/M_PI)) 00513 00514 //debug: helps show how many times a function is called 00515 #define FNHIT() do { static int _TEMPVAR=0; Caption("%d",++_TEMPVAR); } while(0) 00516 00517 #define MAKEPOINT(pt, dword) POINT pt = { (short)LOWORD(dword), (short)HIWORD(dword) } 00518 00519 #define SWAPBYTES(x) (((x>>24) & 0xFF) | ((x & 0xFF)<<24) | ((x&0xFF00)<<8) | ((x>>8) & 0xFF00)) 00520 00521 //strncpy with automatic size param 00522 //debug: #define STRNCPY(dest,src) do { if(sizeof(dest)<16)sysfatal("bad STRNCPY Line:%i, "__FILE__,__LINE__); strncpy(dest,src,sizeof(dest)); } while(0) 00523 #define STRNCPY(dest,src) strncpy(dest,src,sizeof(dest)) 00524 00525 //automatically expand RECT for BitBlt 00526 #define BitBltRect(dst,rc,src,x,y,op) BitBlt(dst,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,src,x,y,op) 00527 00528 // 00529 // ADD_TO_LIST_SORTED 00530 // 00531 // adds an item to a linked list sorting on T->name. uses 00532 // compare_strings_int_parts() function to sort numbered items correctly. 00533 // list T needs to impl "char *name" member, and the supplied "T *next" 00534 // member. 00535 // 00536 // params 00537 // T type of list 00538 // item name of item to add 00539 // head head pointer of list 00540 // next_member name of "T->next" member 00541 #define ADD_TO_LIST_SORTED(T, item, head, next_member) do { \ 00542 item->next_member = 0; \ 00543 T *ATLS_iter = head; \ 00544 if(!ATLS_iter) { /* add first item to list */ \ 00545 head = item; \ 00546 } else { /* add item to list with one or more items */ \ 00547 T **ATLS_previns = &head; /* insert point, start at list head */ \ 00548 for(; ATLS_iter; ATLS_iter = ATLS_iter->next_member) { \ 00549 if(compare_strings_int_parts(item->name, ATLS_iter->name) <= 0) { \ 00550 item->next_member = ATLS_iter; /* next item is current iter item */ \ 00551 (*ATLS_previns) = item; /* previous item points to new item */ \ 00552 break; \ 00553 } \ 00554 if(!ATLS_iter->next_member) { /* before next... */ \ 00555 ATLS_iter->next_member = item; \ 00556 break; \ 00557 } \ 00558 ATLS_previns = &ATLS_iter->next_member; /* remember insert point */ \ 00559 } \ 00560 } \ 00561 } while(0) 00562 00563 00564 #endif //_GLOBAL_H_