fast i/o macros
authorBradley Bell <btb@icculus.org>
Tue, 6 Aug 2002 01:31:07 +0000 (01:31 +0000)
committerBradley Bell <btb@icculus.org>
Tue, 6 Aug 2002 01:31:07 +0000 (01:31 +0000)
main/bm.c
main/cntrlcen.c
main/cntrlcen.h
main/fuelcen.c
main/fuelcen.h
main/segment.c
main/segment.h
main/switch.c
main/switch.h

index e2a0b56..d66d915 100644 (file)
--- a/main/bm.c
+++ b/main/bm.c
@@ -1,4 +1,4 @@
-/* $Id: bm.c,v 1.12 2002-08-02 04:57:19 btb Exp $ */
+/* $Id: bm.c,v 1.13 2002-08-06 01:31:06 btb Exp $ */
 /*
 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
@@ -323,8 +323,7 @@ void bm_read_all(CFILE * fp, int hamfile_version)
        First_multi_bitmap_num = cfile_read_int(fp);
 
        Num_reactors = cfile_read_int(fp);
-       for (i = 0; i < Num_reactors; i++)
-               reactor_read(&Reactors[i], fp);
+       reactor_read_n(Reactors, Num_reactors, fp);
 
        Marker_model_num = cfile_read_int(fp);
 
index 1f7c738..c872201 100644 (file)
@@ -16,7 +16,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #endif
 
 #ifdef RCS
-static char rcsid[] = "$Id: cntrlcen.c,v 1.5 2002-07-27 04:39:23 btb Exp $";
+static char rcsid[] = "$Id: cntrlcen.c,v 1.6 2002-08-06 01:31:07 btb Exp $";
 #endif
 
 #ifdef WINDOWS
@@ -507,19 +507,23 @@ void special_reactor_stuff(void)
        }
 }
 
+#ifndef FAST_FILE_IO
 /*
- * reads a reactor structure from a CFILE
+ * reads n reactor structs from a CFILE
  */
-extern void reactor_read(reactor *r, CFILE *fp)
+extern int reactor_read_n(reactor *r, int n, CFILE *fp)
 {
-       int i;
-
-       r->model_num = cfile_read_int(fp);
-       r->n_guns = cfile_read_int(fp);
-       for (i = 0; i < MAX_CONTROLCEN_GUNS; i++)
-               cfile_read_vector(&(r->gun_points[i]), fp);
-       for (i = 0; i < MAX_CONTROLCEN_GUNS; i++)
-               cfile_read_vector(&(r->gun_dirs[i]), fp);
+       int i, j;
+
+       for (i = 0, i < n; i++) {
+               r[i].model_num = cfile_read_int(fp);
+               r[i].n_guns = cfile_read_int(fp);
+               for (j = 0; j < MAX_CONTROLCEN_GUNS; j++)
+                       cfile_read_vector(&(r[i].gun_points[j]), fp);
+               for (j = 0; j < MAX_CONTROLCEN_GUNS; j++)
+                       cfile_read_vector(&(r[i].gun_dirs[j]), fp);
+       }
+       return i;
 }
 
 /*
@@ -530,8 +534,9 @@ extern void control_center_triggers_read(control_center_triggers *cct, CFILE *fp
        int i;
 
        cct->num_links = cfile_read_short(fp);
-       for (i=0; i<MAX_CONTROLCEN_LINKS; i++ )
-               cct->seg[i] = cfile_read_short( fp );
-       for (i=0; i<MAX_CONTROLCEN_LINKS; i++ )
-               cct->side[i] = cfile_read_short( fp );
+       for (i = 0; i < MAX_CONTROLCEN_LINKS; i++)
+               cct->seg[i] = cfile_read_short(fp);
+       for (i = 0; i < MAX_CONTROLCEN_LINKS; i++)
+               cct->side[i] = cfile_read_short(fp);
 }
+#endif
index 07e04b8..da22dd5 100644 (file)
@@ -29,7 +29,7 @@ typedef struct control_center_triggers {
        short   num_links;
        short   seg[MAX_CONTROLCEN_LINKS];
        short   side[MAX_CONTROLCEN_LINKS];
-} control_center_triggers;
+} __pack__ control_center_triggers;
 
 extern control_center_triggers ControlCenterTriggers;
 
@@ -38,7 +38,7 @@ typedef struct reactor {
        int     n_guns;
        vms_vector gun_points[MAX_CONTROLCEN_GUNS];
        vms_vector gun_dirs[MAX_CONTROLCEN_GUNS];
-} reactor;
+} __pack__ reactor;
 
 #define MAX_REACTORS 7
 
@@ -74,14 +74,19 @@ extern int Control_center_destroyed,Countdown_seconds_left;
 extern int Base_control_center_explosion_time;         //how long to blow up on insane
 extern int Reactor_strength;
 
+#ifdef FAST_FILE_IO
+#define reactor_read_n(r, n, fp) cfread(r, sizeof(reactor), n, fp)
+#define control_center_triggers_read(cct, fp) cfread(cct, sizeof(control_center_triggers), 1, fp)
+#else
 /*
- * reads a reactor structure from a CFILE
+ * reads n reactor structs from a CFILE
  */
-extern void reactor_read(reactor *r, CFILE *fp);
+extern int reactor_read_n(reactor *r, int n, CFILE *fp);
 
 /*
  * reads a control_center_triggers structure from a CFILE
  */
 extern void control_center_triggers_read(control_center_triggers *cct, CFILE *fp);
+#endif
 
 #endif
index 3da3e68..f70c78c 100644 (file)
@@ -16,7 +16,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #endif
 
 #ifdef RCS
-static char rcsid[] = "$Id: fuelcen.c,v 1.4 2002-07-27 22:39:57 btb Exp $";
+static char rcsid[] = "$Id: fuelcen.c,v 1.5 2002-08-06 01:31:07 btb Exp $";
 #endif
 
 #include <stdio.h>
@@ -1128,6 +1128,7 @@ void fuelcen_check_for_hoard_goal(segment *segp)
 
 #endif
 
+#ifndef FAST_FILE_IO
 /*
  * reads an old_matcen_info structure from a CFILE
  */
@@ -1152,3 +1153,4 @@ void matcen_info_read(matcen_info *mi, CFILE *fp)
        mi->segnum = cfile_read_short(fp);
        mi->fuelcen_num = cfile_read_short(fp);
 }
+#endif
index 6464d6b..61cdf5f 100644 (file)
@@ -113,7 +113,7 @@ typedef struct  {
        fix                     interval;                       // Interval between materialogrifizations
        short                   segnum;                         // Segment this is attached to.
        short                   fuelcen_num;            // Index in fuelcen array.
-} old_matcen_info;
+} __pack__ old_matcen_info;
 
 typedef struct matcen_info {
        int                     robot_flags[2]; // Up to 64 different robots
@@ -121,7 +121,7 @@ typedef struct matcen_info {
        fix                     interval;                       // Interval between materialogrifizations
        short                   segnum;                         // Segment this is attached to.
        short                   fuelcen_num;            // Index in fuelcen array.
-} matcen_info;
+} __pack__ matcen_info;
 
 extern matcen_info RobotCenters[MAX_ROBOT_CENTERS];
 
@@ -141,6 +141,10 @@ extern fix EnergyToCreateOneRobot;
 
 void fuelcen_check_for_hoard_goal(segment *segp);
 
+#ifdef FAST_FILE_IO
+#define old_matcen_info_read(mi, fp) cfread(mi, sizeof(old_matcen_info), 1, fp)
+#define matcen_info_read(mi, fp) cfread(mi, sizeof(matcen_info), 1, fp)
+#else
 /*
  * reads an old_matcen_info structure from a CFILE
  */
@@ -150,5 +154,6 @@ void old_matcen_info_read(old_matcen_info *mi, CFILE *fp);
  * reads a matcen_info structure from a CFILE
  */
 void matcen_info_read(matcen_info *ps, CFILE *fp);
+#endif
 
 #endif
index 51b1818..8976981 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: segment.c,v 1.1 2002-07-27 22:39:57 btb Exp $ */
+/* $Id: segment.c,v 1.2 2002-08-06 01:31:07 btb Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include <conf.h>
@@ -8,9 +8,10 @@
 #include "cfile.h"
 
 #ifdef RCS
-static char rcsid[] = "$Id: segment.c,v 1.1 2002-07-27 22:39:57 btb Exp $";
+static char rcsid[] = "$Id: segment.c,v 1.2 2002-08-06 01:31:07 btb Exp $";
 #endif
 
+#ifndef FAST_FILE_IO
 /*
  * reads a segment2 structure from a CFILE
  */
@@ -43,8 +44,9 @@ void delta_light_read(delta_light *dl, CFILE *fp)
  */
 void dl_index_read(dl_index *di, CFILE *fp)
 {
-       di->segnum = cfile_read_short(fp);                                      
+       di->segnum = cfile_read_short(fp);
        di->sidenum = cfile_read_byte(fp);
        di->count = cfile_read_byte(fp);
        di->index = cfile_read_short(fp);
 }
+#endif
index c922480..ed60cbd 100644 (file)
@@ -235,6 +235,11 @@ extern void add_segment_to_group(int segment_num, int group_num);
 // Verify that all vertices are legal.
 extern void med_check_all_vertices();
 
+#ifdef FAST_FILE_IO
+#define segment2_read(s2, fp) cfread(s2, sizeof(segment2), 1, fp)
+#define delta_light_read(dl, fp) cfread(dl, sizeof(delta_light), 1, fp)
+#define dl_index_read(di, fp) cfread(di, sizeof(dl_index), 1, fp)
+#else
 /*
  * reads a segment2 structure from a CFILE
  */
@@ -249,5 +254,6 @@ void delta_light_read(delta_light *dl, CFILE *fp);
  * reads a dl_index structure from a CFILE
  */
 void dl_index_read(dl_index *di, CFILE *fp);
+#endif
 
 #endif
index f9caa11..7dc7a6e 100644 (file)
@@ -16,7 +16,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
 #endif
 
 #ifdef RCS
-static char rcsid[] = "$Id: switch.c,v 1.6 2002-07-27 04:39:23 btb Exp $";
+static char rcsid[] = "$Id: switch.c,v 1.7 2002-08-06 01:31:07 btb Exp $";
 #endif
 
 #include <stdio.h>
@@ -645,6 +645,7 @@ void triggers_frame_process()
                        Triggers[i].time -= FrameTime;
 }
 
+#ifndef FAST_FILE_IO
 /*
  * reads a v29_trigger structure from a CFILE
  */
@@ -700,3 +701,4 @@ extern void trigger_read(trigger *t, CFILE *fp)
        for (i=0; i<MAX_WALLS_PER_LINK; i++ )
                t->side[i] = cfile_read_short(fp);
 }
+#endif
index 49318ca..7aebc5c 100644 (file)
@@ -57,7 +57,7 @@ typedef struct v29_trigger {
        short   num_links;
        short   seg[MAX_WALLS_PER_LINK];
        short   side[MAX_WALLS_PER_LINK];
-} v29_trigger;
+} __pack__ v29_trigger;
 
 typedef struct v30_trigger {
        short   flags;
@@ -67,7 +67,7 @@ typedef struct v30_trigger {
        fix     time;
        short   seg[MAX_WALLS_PER_LINK];
        short   side[MAX_WALLS_PER_LINK];
-} v30_trigger;
+} __pack__ v30_trigger;
 
 //flags for V30 & below triggers
 #define TRIGGER_CONTROL_DOORS      1    // Control Trigger
@@ -96,7 +96,7 @@ typedef struct trigger {
        fix             time;
        short   seg[MAX_WALLS_PER_LINK];
        short           side[MAX_WALLS_PER_LINK];
-} trigger;
+} __pack__ trigger;
 
 extern trigger Triggers[MAX_TRIGGERS];
 
@@ -107,6 +107,11 @@ extern void check_trigger(segment *seg, short side, short objnum,int shot);
 extern int check_trigger_sub(int trigger_num, int player_num,int shot);
 extern void triggers_frame_process();
 
+#ifdef FAST_FILE_IO
+#define v29_trigger_read(t, fp) cfread(t, sizeof(v29_trigger), 1, fp)
+#define v30_trigger_read(t, fp) cfread(t, sizeof(v30_trigger), 1, fp)
+#define trigger_read(t, fp) cfread(t, sizeof(trigger), 1, fp)
+#else
 /*
  * reads a v29_trigger structure from a CFILE
  */
@@ -121,5 +126,6 @@ extern void v30_trigger_read(v30_trigger *t, CFILE *fp);
  * reads a trigger structure from a CFILE
  */
 extern void trigger_read(trigger *t, CFILE *fp);
+#endif
 
 #endif